是否可以将 json 反序列化为 dynamic 对象?
生活随笔
收集整理的這篇文章主要介紹了
是否可以将 json 反序列化为 dynamic 对象?
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
咨詢區(qū)
jswanson:
是否有方法可以將 json 反序列化為 dynamic 對象,如果可以實現(xiàn)的話,那我就可以省去很多冗余類。
回答區(qū)
Tom Peplow:
如果你用 Json.NET 的話,那就非常簡單了。
dynamic?stuff?=?JsonConvert.DeserializeObject("{?'Name':?'Jon?Smith',?'Address':?{?'City':?'New?York',?'State':?'NY'?},?'Age':?42?}");string?name?=?stuff.Name; string?address?=?stuff.Address.City;除了直接反序列化,你還可以使用 Newtonsoft.Json.Linq,參考如下代碼:
dynamic?stuff?=?JObject.Parse("{?'Name':?'Jon?Smith',?'Address':?{?'City':?'New?York',?'State':?'NY'?},?'Age':?42?}");string?name?=?stuff.Name; string?address?=?stuff.Address.City;更多詳細內(nèi)容,參見:http://www.newtonsoft.com/json/help/html/QueryJsonDynamic.htm
RoJaIt:
我使用 http://json2csharp.com/ 生成了一個表示 json 結(jié)構(gòu)的類。
input:
Output:
然后我使用 Newtonsoft.Json 去實現(xiàn)反序列化類。
using?Newtonsoft.Json;namespace?GitRepositoryCreator.Common {class?JObjects{public?static?string?Get(object?p_object){return?JsonConvert.SerializeObject(p_object);}internal?static?T?Get<T>(string?p_object){return?JsonConvert.DeserializeObject<T>(p_object);}} }然后你就可以像下面這樣調(diào)用了。
Person?jsonClass?=?JObjects.Get<Person>(stringJson);string?stringJson?=?JObjects.Get(jsonClass);PS: 如果你的 JSON 變量不是一個有效的C#名,可以用下面的變通方法。
public?class?Exception {[JsonProperty(PropertyName?=?"$id")]public?string?id?{?get;?set;?}public?object?innerException?{?get;?set;?}public?string?message?{?get;?set;?}public?string?typeName?{?get;?set;?}public?string?typeKey?{?get;?set;?}public?int?errorCode?{?get;?set;?}public?int?eventId?{?get;?set;?} }點評區(qū)
果然有 json 的地方就有 Json.NET,這么????的功能,我也是在去年才了解到,學習了。
總結(jié)
以上是生活随笔為你收集整理的是否可以将 json 反序列化为 dynamic 对象?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker小白到实战之容器数据卷,整理
- 下一篇: ASP.NET Core端点路由中三种让