Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JSON序列化为C#对象,并将其放入对象的ArrayList中_C#_Json_Datacontractserializer - Fatal编程技术网

将JSON序列化为C#对象,并将其放入对象的ArrayList中

将JSON序列化为C#对象,并将其放入对象的ArrayList中,c#,json,datacontractserializer,C#,Json,Datacontractserializer,我有以下JSON: { "id": "3cf5373c-9181-4639-89f0-bb64b387f961", "display": "Data 1", "country": "AU" } 我知道如何构造类来序列化它: [DataContract] public class myJSONClass { [DataMember(Name = "id")] public string Id { get; set; } [DataMem

我有以下JSON:

  {
    "id": "3cf5373c-9181-4639-89f0-bb64b387f961",
    "display": "Data 1",
    "country": "AU"
  }
我知道如何构造类来序列化它:

[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如下所示,我将如何定义我的类呢

[
  {
    "id": "3cf5373c-9181-4639-89f0-bb64b387f961",
    "display": "My Data 1",
    "country": "AU"
  },
  {
    "id": "8886d2c8-0fd5-49ff-a3e1-7cef9e654514",
    "display": "no test",
    "country": null
  }
]
我想怎样申报我的班级


我如何序列化它?我不能使用JSON.net,因为我不能使用较新的.net framework。

[]-它是数组。因此,在反序列化之后,您应该获得类的单个数组对象(myJSONClass)

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

但您在示例中做了一些奇怪的事情,因为您下载了字符串并试图序列化它。但您收到了序列化数据(字符串是序列化的。可以通过反序列化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);
    }
为了更好地理解,我重命名了一些变量。现在还可以反序列化类的数组

我还发现了这条线索:

但我个人的建议是看看NewtonsoftJSON。它真的很甜 那么你就可以通过一条线来实现一切:

myJSONClass[] res = JsonConvert.DeserializeObject<myJSONClass[]>(json_string);
myJSONClass[]res=JsonConvert.DeserializeObject(json_字符串);

[]-它是数组。因此,在反序列化之后,您应该获得类的单个数组对象(myJSONClass)

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

但您在示例中做了一些奇怪的事情,因为您下载了字符串并试图序列化它。但您收到了序列化数据(字符串是序列化的。可以通过反序列化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);
    }
为了更好地理解,我重命名了一些变量。现在还可以反序列化类的数组

我还发现了这条线索:

但我个人的建议是看看NewtonsoftJSON。它真的很甜 那么你就可以通过一条线来实现一切:

myJSONClass[] res = JsonConvert.DeserializeObject<myJSONClass[]>(json_string);
myJSONClass[]res=JsonConvert.DeserializeObject(json_字符串);
您可以执行以下操作:

// 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);
//用于JavaScriptSerializer
使用System.Web.Script.Serialization;
JavaScriptSerializer serializer=新的JavaScriptSerializer();
List myList=序列化程序。反序列化(内容);
//用于JsonConvert
使用Newtonsoft.Json;
List myList=Newtonsoft.Json.JsonConvert.DeserializeObject(内容);
希望这有帮助

您可以执行以下操作:

// 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);
//用于JavaScriptSerializer
使用System.Web.Script.Serialization;
JavaScriptSerializer serializer=新的JavaScriptSerializer();
List myList=序列化程序。反序列化(内容);
//用于JsonConvert
使用Newtonsoft.Json;
List myList=Newtonsoft.Json.JsonConvert.DeserializeObject(内容);

希望这有帮助

非常感谢@dmitry,它工作得非常好。另外,我很想使用NewtonsoftJSON,但它是我们的遗留系统之一,无法升级到更新的.Net;(非常感谢@dmitry,它工作得非常好。另外,我很想使用NewtonsoftJSON,但它是我们的传统系统之一,无法升级到更新的.Net。)(