序列化 JSON 到 C# 对象到对象的 ArrayList

Serialise JSON to C# object into ArrayList of objects

我有以下 JSON:

  {
    "id": "3cf5373c-9181-4639-89f0-bb64b387f961",
    "display": "Data 1",
    "country": "AU"
  }

我知道如何构造 class 来序列化它:

[DataContract]
public class myJSONClass
{

    [DataMember(Name = "id")]
    public string Id { get; set; }

    [DataMember(Name = "display")]
    public string Display { get; set; }

    [DataMember(Name = "country")]
    public string Country { get; set; }
}

我使用下面的序列化:

        var url = "http://myJSONAPI/";

        var syncClient = new WebClient();
        var content = syncClient.DownloadString(url);

        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(myJSONClass));
        using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(content)))
        {
            var jsonData = (myJSONClass)serializer.ReadObject(ms);
        }

但是如果我的 JSON 如下所示,我将如何定义我的 class?

[
  {
    "id": "3cf5373c-9181-4639-89f0-bb64b387f961",
    "display": "My Data 1",
    "country": "AU"
  },
  {
    "id": "8886d2c8-0fd5-49ff-a3e1-7cef9e654514",
    "display": "no test",
    "country": null
  }
]

如何申报我的 class?

我该如何序列化它?我无法使用 JSON.net,因为我无法使用较新的 .Net 框架。

[] - 它是数组。所以在反序列化之后你应该得到你的 class(myJSONClass)

的单个数组对象
myJSONClass[] deserializedData=deserialize(jsonData);

所以如果你想得到一个反序列化的对象数组,你应该只序列化一个数组而不是单个对象(class 的几个对象)

但是您在示例中做了一些奇怪的事情,因为您下载了字符串并试图对其进行序列化。但是你收到了序列化数据(字符串被序列化。可以通过反序列化json(或xml)字符串来创建对象)。

因此,如果您实际收到数组中的 2 个对象(如上一个 JSON 示例),您的代码应该更像这样:

    var url = "http://myJSONAPI/";
    var syncClient = new WebClient();
    var content = syncClient.DownloadString(url);

    DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(myJSONClass[]));
    using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(content)))
    {
        myJSONClass[] jsonObject = (myJSONClass[])serializer.ReadObject(ms);
    }

我重命名了一些变量以便更好地理解。另外,现在您反序列化 class.

的数组

我还发现了这个帖子:Deserialization of array with DataContractJsonSerializer with Windows Store App

但我自己的建议是看看 NewtonsoftJSON。真的很甜 http://www.newtonsoft.com/json/help/html/deserializeobject.htm 那么你就可以通过一行来实现一切:

myJSONClass[] res = JsonConvert.DeserializeObject<myJSONClass[]>(json_string);

你可以做一些:

// Use for JavaScriptSerializer
using System.Web.Script.Serialization; 
JavaScriptSerializer serializer = new JavaScriptSerializer();
List<myJSONClass> myList = serializer.Deserialize<List<myJSONClass>>(content);

// Use for JsonConvert
using Newtonsoft.Json;
List<myJSONClass> myList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<myJSONClass>>(content);

希望对您有所帮助!