说我有一个像这样的平面JSON文档:
{
"Field1": "Value",
"Field2": "Value"
}
并想将其反序列化为自定义对象A
,其中Field2
位于子对象B
上:
public class A
{
public string Field1 { get; set; }
public B B { get; set; }
}
public class B
{
public string Field2 { get; set; }
}
如何配置Newtonsoft JSON来处理此问题?
var obj = JsonConvert.DeserializeObject<A>(json);
答案 0 :(得分:1)
首先,您必须在A中修复属性名称,以便解串器知道FIeld2映射到B:
public class A
{
public string Field1 { get; set; }
[JsonProperty("Field2")]
public B B { get; set; }
}
然后,您必须以某种方式定义从string
值(“ Value”)到B
对象的转换。您可以定义一个转换运算符:
public class B
{
public static explicit operator B(string source)
{
return new B(){Field2 = source};
}
public string Field2 { get; set; }
}
或者,如果不希望这样,您可以定义一个自定义值转换器(简单的概念证明):
public class BConverter : JsonConverter<B>
{
public override void WriteJson(JsonWriter writer, B value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override B ReadJson(JsonReader reader, Type objectType, B existingValue, bool hasExistingValue, JsonSerializer serializer)
{
string s = reader.Value as string;
return new B() { Field2 = s };
}
}
...并将转换器应用于A
的{{1}}属性:B
。