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(序列化程序);
    

啊哈,有道理。非常感谢。