C# 序列化Json的2D数组
我在连载方面有困难。我有一个aspx页面,它使用ajax调用从服务器端返回对象 期望输出 模型点=[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3](用于WebGL) 实际产量 ModelPoints={{Points=[1,2,3]},{Points=[1,2,3]},{Points=[1,2,3]},{Points=[1,2,3]} 应用程序流程如下所示 Ajax->Aspx->WCF->Aspx->Ajax 下面是被错误序列化的类。我如何重新构造它,使其工作?我不想多次解析18000+pts,因此服务器的输出应该是正确的格式。i、 我不能在客户端解析它 对象名称点来自参数名称,如何对二维浮点数组执行此操作 下面的课程C# 序列化Json的2D数组,c#,asp.net,ajax,serialization,C#,Asp.net,Ajax,Serialization,我在连载方面有困难。我有一个aspx页面,它使用ajax调用从服务器端返回对象 期望输出 模型点=[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3](用于WebGL) 实际产量 ModelPoints={{Points=[1,2,3]},{Points=[1,2,3]},{Points=[1,2,3]},{Points=[1,2,3]} 应用程序流程如下所示 Ajax->Aspx->WCF->Aspx->Ajax 下面是被错误序列化的类。我如何重新构造它,使其工作?
[Serializable()]
public class ModelPoint
{
public ModelPoint()
{
}
public ModelPoint(float x, float y, float z)
{
_points = new List<Nullable<float>>();
_points.Add(x);
_points.Add(y);
_points.Add(z);
}
private List<Nullable<float>> _points;
public List<Nullable<float>> Points
{
get {return _points;}
set { _points = value; }
}
}
[Serializable()]
public class Model
{
private List<ModelPoint> _modelPoints;
[System.Xml.Serialization.XmlArray("ModelPoints", IsNullable = true)]
[System.Xml.Serialization.XmlArrayItem()]
public List<ModelPoint> ModelPoints
{
get {return _modelPoints;}
set { _modelPoints = value; }
}
}
[Serializable()]
公共类模型点
{
公共模型点()
{
}
公共模型点(浮点x、浮点y、浮点z)
{
_点=新列表();
_增加(x)点;
_增加(y)点;
_增加(z)点;
}
私人名单;;
公共列表点
{
获取{返回_点;}
设置{u points=value;}
}
}
[可序列化()]
公共类模型
{
私有列表(modelPoints);;
[System.Xml.Serialization.XmlArray(“ModelPoints”,IsNullable=true)]
[System.Xml.Serialization.XmlArrayItem()]
公共列表模型点
{
获取{return\u modelPoints;}
设置{u modelPoints=value;}
}
}
在json中,方括号[]表示数组,花括号{}表示对象。因此,由所需输出表示的数据结构:
[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
var ds = new DataContractJsonSerializer(typeof(Model));
var model = new Model
{
ModelPoints = new[] {
new[] { 1f, 2f, 3f },
new[] { 4f, 5f, 6f } }
};
var sb = string.Empty;
using (var ms = new MemoryStream())
{
ds.WriteObject(ms, model);
sb= Encoding.UTF8.GetString(ms.ToArray());
}
Debug.WriteLine(sb);
是一个二维整数数组。要在C#中获得这一点,您可以使用以下内容:
List<List<int>> model = new List<List<int>>()
model.Add(new List<int>() {1, 2, 3});
model.Add(new List<int>() {1, 2, 3});
int[,] model = new int[5, 3] {{1,2,3},{1,2,3}};
您基本上只希望生成二维数组。假设在WCF端点上使用,则模型类应如下所示:
public class Model
{
private float[][] _modelPoints;
public float[][] ModelPoints
{
get { return _modelPoints; }
set { _modelPoints = value; }
}
}
请注意,我删除了所有序列化属性(如果将它们保留在序列化程序上,则会神奇地输出backingfield而不是属性),并且我不再使用ModelPoint类。如果我向DataContractJSONSerializer输入数据,我将获得您想要的输出:
[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
var ds = new DataContractJsonSerializer(typeof(Model));
var model = new Model
{
ModelPoints = new[] {
new[] { 1f, 2f, 3f },
new[] { 4f, 5f, 6f } }
};
var sb = string.Empty;
using (var ms = new MemoryStream())
{
ds.WriteObject(ms, model);
sb= Encoding.UTF8.GetString(ms.ToArray());
}
Debug.WriteLine(sb);
在调试控制台中提供与预期接收内容类似的内容
{“模型点”:[[1,2,3],[4,5,6]}
不要使用单独的类,而是在Model类而不是ModelPoint类中构建点阵列。