1

假设我有一个模型:

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 结果中将包含许多项目,因此不会只有一个对象具有此节点。

4

1 回答 1

1

Json.NET 将 JSON 解析为标记(对象开始、属性、字符串等),然后序列化程序读取这些标记以构造对象。无法捕获原始传入文本并准确保留格式。

壁橱的功能是有一个 JToken 属性,该属性最终会得到一个表示原始 JSON 的对象。然后您可以对其调用 ToString() ,但确切的格式将丢失。

如果您想以特定方式编写 JSON,则 JRaw 属性的内容将完全按照提供的方式编写。

序列化原始 JSON

于 2013-10-14T03:11:58.490 回答