如何正确挂接到 Json.NET 的 JObject.ToObject<T>()?



我有一个具有几种嵌套类型的数据结构。

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);
    

相关内容

  • 没有找到相关文章

最新更新