给出以下json
{
"$$href": "http://localhost:8080/url1",
"name": "Sebastian Slutzky"
}
我想反序列化为这样的对象
public class DomainObject
{
[JsonProperty("$$href")]
public string href { get; set; }
public JObject this[string key] => throw new NotImplementedException();
}
以便可以动态访问任意属性(例如name
)
var href = domainObject.href;
var name = domainObject["name"] as string;
我目前的实现方式是将JObject传递给对象的构造函数,并对其进行修饰(即合成)。有没有一种方法可以通过继承来解决此问题(即通过扩展JObject? 还有其他解决方案吗?
答案 0 :(得分:1)
您可以使用JsonExtensionData
。例如
public class DomainObject
{
[JsonProperty("$$href")]
public string href { get; set; }
[JsonExtensionData]
private IDictionary<string, JToken> UnknownTypes;
public JToken this[string key] => UnknownTypes[key];
}
索引器现在允许您使用以下键检索动态属性的值。
var result = JsonConvert.DeserializeObject<DomainObject>(json);
var name = result["name"].Value<string>();