![](/img/trans.png)
[英]JsonSerializationException in Json Deserializing using Json.NET
[英]Deserializing Json using .Net
我有一個外部供應商API,它以這種格式返回JSON
{"3":{"id":1,"name":"Scott Foo","age":55},
"59":{"id":2,"name":"Jim Morris","age":62}}
我正在嘗試使用以下代碼反序列化
[DataContract]
public class Name
{
[DataMember]
public int id { get; set; }
[DataMember]
public string name { get; set; }
[DataMember]
public int age{ get; set; }
}
反序列化的代碼是
List<Name> nameList = Deserialize<List<Name>>(temp);
反序列化定義為
public static T Deserialize<T>(string json)
{
T obj = Activator.CreateInstance<T>();
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
obj = (T)serializer.ReadObject(ms);
ms.Close();
ms.Dispose();
return obj;
}
在nameList中返回的對象的計數為零。 知道如何在.Net中反序列化此JSON(即,不使用Json.Net或任何此類第三方dll)嗎?
這是一個選擇。
//using System.Runtime.Serialization.Json;
public static dynamic Deserialize(string content)
{
return new System.Web.Script.Serialization.JavaScriptSerializer().DeserializeObject(content);
}
var f = Deserialize(json);
List<Name> list = new List<Name>();
foreach(var item1 in (Dictionary<string, object>) f)
{
Dictionary<string, object> item2 = (Dictionary<string, object>) item1.Value;
list.Add( new Name(){
id = (int) item2["id"],
name = (string) item2["name"],
age = (int) item2["age"]
});
}
理論上,您的根對象將是這樣的
public class root
{
public Name 3;
public Name 59;
}
但是3和59不是有效的c#變量/字段/屬性名稱( 它們也是dynamic )。 因此,您不能將其反序列化為一個類。
我看到您不想使用Json.Net或任何此類第三方dll,但這是我使用Json.Net進行解析的方式
string json = @"{""3"":{""id"":1,""name"":""Scott Foo"",""age"":55},""59"":{""id"":2,""name"":""Jim Morris"",""age"":62}}";
JObject jobj = (JObject)JsonConvert.DeserializeObject(json);
foreach (JProperty user in jobj.Children())
{
Console.WriteLine(user.Name + "==>" + user.Value["name"]);
}
和輸出
3==>Scott Foo
59==>Jim Morris
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.