我有一个具有几种嵌套类型的数据结构。
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>()
...并且仅在估算MyDataType.CustomNestedDataType
时运行自定义代码。我发现的每个解决方案都扩展了JsonConverter
,但是据我所知,仅在从RAW JSON中解析而不是预先放置的JObject
时才有效。在不编写可分低数据类型的自定义代码的情况下,做这件事的正确方法是什么?
我发现的每个解决方案都扩展了JSONCONVERTER,但据我所知,仅在RAW 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);