gpt4 book ai didi

c# - 如何正确连接到 Json.NET 的 JObject.ToObject()?

转载 作者:太空宇宙 更新时间:2023-11-03 12:35:58 25 4
gpt4 key购买 nike

我有一个包含多个嵌套类型的数据结构。

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,但据我所知,这仅在从原始 JSON 解析时有效,而不是预解析的 JObject。在不为可推断数据类型编写自定义代码的情况下,执行此操作的正确方法是什么?

最佳答案

Every solution I've found has extended JsonConverter, but as far as I can tell this only works when parsing from 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);

关于c# - 如何正确连接到 Json.NET 的 JObject.ToObject<T>()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40985569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com