Json.Net反序列化,保留一些属性不被序列化

3

我有一个JSON字符串,看起来像这样:

{
    "Bar": { 
        "Pressure":42,
        "ServesDrinks":false
    },
    "Baz":[
        {
            "Pressure":9001,
            "ServesDrinks":true
        },
        {
            "Pressure":0,
            "ServesDrinks":false
        }
    ]
}

我希望将这个反序列化成一个类,看起来像这样:

public class Foo
{
    public Bar Bar { get; set; }

    /// <summary>
    /// Raw serialized (un-de-serialized) json string of the Baz list  
    /// </summary>
    public string Baz { get; set; }
}

基本上不是对Baz值进行反序列化,而是存储原始字符串。也就是说,我希望在序列化后的字符串值为:

"[{\"Pressure\":9001,\"ServesDrinks\":true},{\"Pressure\":0,\"ServesDrinks\":false}]"

我正在使用Json.Net,但还没有找到如何做到这一点。在理想情况下,我只想在我的属性上放置一个神奇的属性,保留原始json。
我在这里看到了一个非常相似的问题: 部分反序列化JSON.NET,保留一些字段的原始值 但我不知道如何使用JObject方法。
(如果有任何帮助,我知道要保留的数据是一个列表)
感谢任何帮助!

2
另一个问题建议将Baz字段更改为JObject,这是一种通用类型,用于表示JSON对象。您可以使用Baz.ToString()获取JSON字符串,并使用JObject.parse(aJSONString)进行赋值。 - Jakub Wasilewski
谢谢Jakub,但是我无法让它工作。我得到了一个JsonReaderException:“读取字符串时出错。意外的令牌:StartArray。路径'Baz',行1,位置8。” - Anders Astrom
你可以尝试使用JArray。我稍微查看了一下JSON.Net的文档,发现JArray用于处理JS数组,而JObject仅适用于真正的JS对象({foo: ...})。我在下面给出了更详细的答案。 - Jakub Wasilewski
1个回答

2
根据另一个问题的答案,似乎在JSON.Net中处理这种情况的解决方案是使用适当的“J*”类型,并使用它们的“ToString()”和“Parse()”方法来处理JSON字符串。对于JS列表,适当的类型似乎是“JArray”,而不是用于“{}”样式Javascript对象的“JObject”。请注意,我对JSON.Net知之甚少,也许有一种不同的解决方案可以避免在各个地方使用“Parse()”和“ToString()”。了解该库更多的人可能会给出更好的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接