假设我有这样的JSON,我如何为反序列化建模我的类?
我对标准属性(如“虚拟”或普通数组)的模型类没有任何问题,但在这种情况下,我的“链接”数组是具有不同名称的项目列表(“插件”,“条件”,“转换” “等等)。
"dummy": "1",
"links": {
"addons": {
"href": "/16071d9f-efec-4282-a42e-a495eea76ae0/offers/031C9E47-4802-4248-838E-778FB1D2CC05/addons",
"method": "GET"
},
"conditions": {
"href": "/16071d9f-efec-4282-a42e-a495eea76ae0/offers/031C9E47-4802-4248-838E-778FB1D2CC05/conditions",
"method": "GET"
},
"conversions": {
"href": "/16071d9f-efec-4282-a42e-a495eea76ae0/offers/031C9E47-4802-4248-838E-778FB1D2CC05/conversions",
"method": "GET"
},
"list_prices": {
"href": "/16071d9f-efec-4282-a42e-a495eea76ae0/offers/031C9E47-4802-4248-838E-778FB1D2CC05/list-prices",
"method": "GET"
},
"mutual_exclusion": {
"href": "/16071d9f-efec-4282-a42e-a495eea76ae0/offers/031C9E47-4802-4248-838E-778FB1D2CC05/mutually-exclusive-offers",
"method": "GET"
},
"prerequisites": {
"href": "/16071d9f-efec-4282-a42e-a495eea76ae0/offers/031C9E47-4802-4248-838E-778FB1D2CC05/prerequisites",
"method": "GET"
},
"product": {
"href": "/16071d9f-efec-4282-a42e-a495eea76ae0/products/f245ecc8-75af-4f8e-b61f-27d8114de5f3",
"method": "GET"
}
},
答案 0 :(得分:2)
假设您正在寻找LinkTypes
的集合(如果愿意的话),在您的JSON中,您是否可以使用以下内容,并执行Deserialize
上的RootObject
?< / p>
查看小提琴页面上控制台窗格的输出。
public class Link
{
public string Href { get; set; }
public string Method { get; set; }
}
public class Links
{
[JsonProperty("addons")]
public Link Addons { get; set; }
[JsonProperty("conditions")]
public Link Conditions { get; set; }
[JsonProperty("conversions")]
public Link Conversions { get; set; }
[JsonProperty("list_prices")]
public Link ListPrices { get; set; }
[JsonProperty("mutual_exclusion")]
public Link MutualExclusion { get; set; }
[JsonProperty("prerequisites")]
public Link Prerequisites { get; set; }
[JsonProperty("product")]
public Link Product { get; set; }
}
public class RootObject
{
public string dummy { get; set; }
public Links links { get; set; }
}
然后像这样执行Deserializer
。
var myDummyLinksList = JsonConvert.DeserializeObject<RootObject>(jsonText);
其中jsonText
包含您在示例中列出的json字符串:
但是,如果List
个links
个对象是动态的并且内部对象的数量不同而您需要捕获所有这些对象,那么则可能需要编写自定义转换器继承自然后使用the answer发布的@mfarouk。JsonConverter
对象。
我分叉了我的dotNet小提琴并实施了他的解决方案,它就像动态案例的老板一样!
希望这有帮助!
答案 1 :(得分:1)
links
属性可以解析为键值字典,类可以像
public class JSONClass
{
public string dummy { get; set; }
public Dictionary<string, Link> links;
public class Link
{
public string Href { get; set; }
public string Method { get; set; }
}
}
然后反序列化为
var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<JSONClass>(JSON);