![](/img/trans.png)
[英]Deserialization of JSON object by using DataContractJsonSerializer in C#
[英]Deserialize Json into a C# dynamic object using DataContractJsonSerializer
我有一個與此問題相同的問題,因為我想反序列化動態json數據 。 換句話說,鍵:“ error1等是動態的。在我的情況下:
{
"errors" : {
"error1" : {
"name" : "connection error",
"location" : "CPU board",
"id" : "E0001"
},
"warning2" : {
"name" : "Value not formatted",
"location" : "Controller",
"id" : "W005"
},
"info4" : {
"name" : "Attention to temperature",
"location" : "Heater",
"id" : "I008"
}
}
}
在問題中,答案使用JsonConvert
反序列化為字典。 我在這里還發現可以使用JavascriptSerializer
進行類似的操作。
我想我可以用那些來解決我的問題,但是我的問題是,我也可以使用DataContractJsonSerializer
來做到這一點嗎?
您可以將其反序列化為對象字典:
var result = JsonConvert.DeserializeObject<Error>(json);
實現如下所示的類:
public class Error
{
public class Details
{
public string Name {get;set}
public string Id {get;set}
public string Location {get;set}
}
public Dictionary<string, Details> Errors {get;set;}
}
您可以執行以下操作:
using(MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
Error deserializedError = new Error();
DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedError.GetType());
deserializedError = ser.ReadObject(ms) as Error;
}
如果要訪問對象數據(例如errors.error1.name etc..
考慮使用dynamic
和ExpandoObject
。 這是一個有效的例子
using (var f = new StreamReader("json1.json"))
{
string json = f.ReadToEnd();
dynamic deserializedObject = JsonConvert.DeserializeObject<ExpandoObject>(json);
Console.WriteLine(deserializesObject.errors.error1.name);
}
輸出: connection error
我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.