假设我有一个模型:
public class Node<T> {
public T Value { get; set; }
}
我序列化一个节点int[]
导致:
{"value":[1,2,3]}
我现在想将其反序列化为:Node<string>
因此将其视为 JSON 块:
node.Value == "[1,2,3]"
我现在可以使用JsonConverter
例如使用的自定义,JToken.ReadFrom
然后ToString
对其进行操作。但是,这会使格式化等中断。
我也可以创建一个新的JsonWriter
并在我的Converter
:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var sb = new StringBuilder();
using (var wo = new StringWriter(sb))
{
using (var w = new JsonTextWriter(wo))
{
w.WriteToken(reader, true);
}
}
return sb.ToString();
}
我对这个解决方案的问题是它会为每个用转换器标记的属性创建编写器......
第三种解决方案是自己遍历图表并重用编写器等。
哪个是将 JSON 字符串中的某些节点反序列化为原始 JSON 的推荐(最有效)解决方案?请注意,JSON 结果中将包含许多项目,因此不会只有一个对象具有此节点。