我如何正确连接到 Json.NET 的 JObject.ToObject<T>()?
How do I properly hook into Json.NET's 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
,但据我所知,这仅在从原始 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
属性应用于您的 class 以指定要使用的转换器:
[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);
我有一个包含多个嵌套类型的数据结构。
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
属性应用于您的 class 以指定要使用的转换器:[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);