将JSON序列化为C#对象,并将其放入对象的ArrayList中
我有以下JSON:将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
{
"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。)(