【问题标题】:Serialise a 2D array for Json为 Json 序列化一个二维数组
【发布时间】:2014-12-29 02:13:40
【问题描述】:

我在序列化方面遇到了困难。我有一个使用 ajax 调用从服务器端返回对象的 aspx 页面。

期望的输出

ModelPoints=[[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]](用于 WebGL)

实际输出 模型点={{点=[1,2,3]},{点=[1,2,3]},{点=[1,2,3]},{点=[1,2,3]} }

申请流程是

Ajax -> Aspx -> WCF -> Aspx -> Ajax

以下是被错误序列化的类。我如何重组它以使其工作?我不想多次解析 18000+ pts,所以服务器的输出应该是正确的格式。即我无法在客户端解析它。

对象名称Points来自参数名称,如何为二维浮点数组做到这一点。

下面的类

[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; }
    }
}

【问题讨论】:

  • 不要使用单独的类,而是在 Model 类而不是 ModelPoint 类中构建点数组。

标签: c# asp.net ajax serialization


【解决方案1】:

您基本上只想要生成一个二维数组。假设您在 WCF 端点上使用 DataContractJsonSerializer,您的 Model 类应如下所示:

public class Model
{
    private float[][] _modelPoints;

    public float[][] ModelPoints
    {
        get { return _modelPoints; }
        set { _modelPoints = value; }
    }
}

请注意,我删除了所有序列化属性(如果将它们留在序列化程序上,则会神奇地输出支持字段而不是属性)并且我不再使用 ModelPoint 类。如果我输入 DataContractJSONSerializer 我会得到你想要的输出:

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);

在调试控制台中给出与您期望收到的相似。

{"ModelPoints":[[1,2,3],[4,5,6]]}

【讨论】:

    【解决方案2】:

    在 json 中,方括号 [] 表示数组,大括号 {} 表示对象。所以你想要的输出所代表的数据结构:

    [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
    

    是一个二维整数数组。要在 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}};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 2016-09-15
      • 2017-08-27
      相关资源
      最近更新 更多