C# 如何正确地连接到Json.NET';s JObject.ToObject<;T>;()?
我有一个包含多个嵌套类型的数据结构C# 如何正确地连接到Json.NET';s JObject.ToObject<;T>;()?,c#,json,linq,json.net,json-deserialization,C#,Json,Linq,Json.net,Json Deserialization,我有一个包含多个嵌套类型的数据结构 public class MyDataType { public int InferrableInt { get; set; } public float InferrableFloat { get; set; } public InferrableNestedDataType MyINDT { get; set; } public CustomNestedDataType MyCNDT { get; set; } p
public class MyDataType {
public int InferrableInt { get; set; }
public float InferrableFloat { get; set; }
public InferrableNestedDataType MyINDT { get; set; }
public CustomNestedDataType MyCNDT { get; set; }
public class InferrableNestedDataType {
public int X { get; set; }
public int Y { get; set; }
}
public class CustomNestedDataType {
// Data processed in a way that can't be expressed through JSON
public string CustomData { get; set; }
public int NestedInferrableInt { get; set; }
}
}
这些嵌套类型中的大多数都可以通过默认行为推断出来
我还从代码的另一部分收到了一个JObject
。我希望能够:
var mydt = jobjectInstance.ToObject<MyDataType>()
var mydt=jobjectInstance.ToObject()
。。。并且仅在反序列化MyDataType.CustomNestedDataType时运行自定义代码。我找到的每个解决方案都扩展了JsonConverter
,但据我所知,这只在从原始JSON解析时有效,而不是预解析的JObject
。不为可推断的数据类型编写自定义代码的正确方法是什么
我找到的每个解决方案都扩展了JsonConverter,但据我所知,这只在从原始JSON解析时起作用
它还应该与JObject.ToObject
一起使用。您至少有两种选择:
- 将
属性应用于类,以指定要使用的转换器:JsonAttributeConverter
(如果只是[JsonConverter(CustomNestedDataTypeConverter)] public class CustomNestedDataType
需要自定义序列化,请为此编写一个转换器,并将该属性应用于属性)CustomNestedDataType.CustomData
- 使用转换器创建一个
,并将其传递给JsonSerializer
:JObject.ToObject
var serializer = new JsonSerializer(); serializer.Converters.Add(new CustomNestedDataTypeConverter()); var result = jObject.ToObject<MyDataType>(serializer);
var serializer=newjsonserializer(); serializer.Converters.Add(新的CustomNestedDataTypeConverter()); var result=jObject.ToObject(序列化程序);