我有以下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框架。
答案 0 :(得分:2)
[] - 这是阵列。因此,在反序列化之后,您应该获得类的单个数组对象(myJSONClass)
myJSONClass[] deserializedData=deserialize(jsonData);
因此,如果你想得到一个反序列化的对象数组,你应该只序列化一个对象而不是一个数组(你的类的几个对象)
但是你在例子中做了一些奇怪的事情,因为你下载了字符串并尝试序列化它。但是您收到了序列化数据(字符串是序列化的。可以通过反序列化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);
}
为了更好地理解,我重命名了一些变量。现在你反序列化你的类的数组。
我也找到了这个帖子: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);
答案 1 :(得分:1)
你可以做一些:
// 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);
希望这有帮助!