【发布时间】:2023-11-08 12:49:01
【问题描述】:
我有一个看起来像这样的 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 值,而是存储原始字符串。
IE。我希望序列化后的Baz 字符串值为:
"[{\"Pressure\":9001,\"ServesDrinks\":true},{\"Pressure\":0,\"ServesDrinks\":false}]"
我正在使用 Json.Net,但还没有弄清楚如何做到这一点。
在理想情况下,我只想在我的 Baz 属性上添加一个魔术属性,以保留原始 json。
我在这里看到了一个非常相似的问题: Partially deserialize with JSON.NET, keeping some fields raw
但我确实了解如何使用 JObject 方法。
(如果有帮助,我知道我要保留的数据是一个列表)
感谢您的帮助!
【问题讨论】:
-
另一个问题建议将Baz字段更改为
JObject,这是表示JSON对象的通用类型。您可以使用Baz.ToString()获取JSON 字符串,并使用JObject.parse(aJSONString)分配给它。 -
感谢 Jakub,但我无法让它工作。我得到一个 JsonReaderException :“读取字符串时出错。意外的令牌:StartArray。路径'Baz',第 1 行,位置 8。”
-
你可以试试
JArray。我看了一点 JSON.Net 文档,看起来JArray用于处理 JS 数组,而JObject仅适用于真正的 JS 对象({foo: ...})。我在下面给出了更全面的答案。 -
谢谢!成功了!
标签: json parsing json.net json-deserialization