【问题标题】:Serializing and Deserializing a Jagged Array C#序列化和反序列化交错数组 C#
【发布时间】:2016-07-13 03:54:07
【问题描述】:

我的 Web 服务中有一个方法,它运行两个 linq 查询并将结果插入到锯齿状数组中。我现在正在尝试序列化和反序列化数组。我正在使用 newtonsoft json 来执行此操作。

但是,当我尝试反序列化数组时,我得到以下信息:

附加信息:无法创建 System.Array 类型的实例。类型是接口或抽象类,不能 被实例化。路径“[0] [0]”,第 1 行,位置 3。

在我的网络服务方法中,我有(序列化):

Array[][] myArray = new Array[2][];
myArray[0] = mtsections; //linq query 1
myArray[1] = sectionDetails; //linq query 2

string myp = JsonConvert.SerializeObject(myArray);

return myp;

在我的客户中,我有(反序列化):

string JSONString = context.ExpordOfQuestionsWord(RaId);

Array[][] myArray = new Array[2][];

myArray = JsonConvert.DeserializeObject<Array[][]>(JSONString);

有人知道怎么回事吗?

谢谢。

【问题讨论】:

  • mtssections和sectionDetails的类型有哪些?
  • 在我的 linq 查询结束时,我调用了“.ToArray()”。所以它们是数组类型。我可以在我的客户端看到 json 字符串,所以我认为这不是问题。
  • 请看文档,它是一个抽象类。 msdn.microsoft.com/en-us/library/system.array(v=vs.110).aspx我相信你使用 Array[][] 不正确。
  • 抱歉,我对 Web 服务真的很陌生,您有任何如何正确执行此操作的示例> 非常感谢。

标签: c# serialization json.net deserialization jagged-arrays


【解决方案1】:

这是因为反序列化是通过首先使用默认构造函数创建对象然后填充内部值来执行的。在这里,您使用的是抽象类 Array 类。因此你不能创建它的实例。

如果您想使用两个不同类型的数组,那么简单的解决方案是发送两个 json。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2015-03-31
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多