C#Json.net将嵌套的Json反序列化为字符串
我有以下json字符串C#Json.net将嵌套的Json反序列化为字符串,c#,json,json.net,C#,Json,Json.net,我有以下json字符串 { "property1" : "value", "property2" : 2, "property3" : { "subprperty1" : "value" } } 我想反序列化它(使用Newtonsoft的Json.net),但保留property3作为字符串 因此,我创建了以下模型类 class JsonModel { string property1 {get; set;} int property2 {get; set;} string pro
{
"property1" : "value",
"property2" : 2,
"property3" : { "subprperty1" : "value" }
}
我想反序列化它(使用Newtonsoft的Json.net),但保留property3作为字符串
因此,我创建了以下模型类
class JsonModel {
string property1 {get; set;}
int property2 {get; set;}
string property3 {get; set;}
}
但是当我使用JsonConvert.DeserializeObject(json_字符串)反序列化它时代码>我得到以下错误:
Newtonsoft.Json.JsonReaderException: 'Unexpected character encountered while parsing value: {.
因为property3
是一个对象而不是字符串
您可以尝试使用类来承载它
public class Property3
{
public string subprperty1 { get; set; }
}
public class JsonModel
{
public string property1 { get; set; }
public int property2 { get; set; }
public Property3 property3 { get; set; }
}
注意
有两种方法可以轻松创建模型
您可以在VisualStudio中使用Web Essentials,使用Edit>Paste special>Paste JSON
作为一个类,您可以更容易地了解JSON和模型之间的关系
如果您不能使用WebEssentials,您可以使用在线JSON来为类建模
您可以尝试使用这些模型来携带JSON格式
"property3" : { "subprperty1" : "value" }
这不是嵌套的json,它只是一个标准的json对象
更新
根据您的评论,我认为您需要一个通用属性。如果您的用例是您事先知道会发生什么,并且有一些子集正在发生变化,那么泛型可能就是您应该做的事情
所以你可以用标准的方式反序列化它
class JsonModel<T>
{
string property1 {get; set;}
int property2 {get; set;}
T property3 {get; set;}
}
class SomeOtherMagicalClass
{
string subprperty1 {get; set;}
}
...
var results = JsonConvert.DeserializeObject<JsonModel<SomeOtherMagicalClass>>(json_string);
classjsonmodel
{
字符串属性1{get;set;}
int property2{get;set;}
T属性3{get;set;}
}
类其他魔法类
{
字符串子参数1{get;set;}
}
...
var results=JsonConvert.DeserializeObject(json_字符串);
如果任务是反序列化对象,同时将属性3
保留为json字符串,那么我们可以做两件事
首先:使用JObject解析对象。Parse
:
class JsonModel {
public string property1 { get; set; }
public int property2 { get; set; }
public string property3 { get; set; }
}
var json_string = "{ \"property1\" : \"value\", \"property2\" : 2, \"property3\" : { \"subprperty1\" : \"value\" } }";
var jObj = JObject.Parse(json_string);
var obj = new JsonModel()
{
property1 = jObj["property1"].ToString(),
property2 = (int) jObj["property2"],
property3 = jObj["property3"].ToString(),
};
Console.WriteLine(obj.property3);
第二:将obj反序列化为对象字典:
var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(json_string);
Console.WriteLine(dict["property3"].ToString());
@通用谢谢你的解决方案也很有用:)谢谢,但我需要将它作为字符串保存,而不是另一个模型类。如果它不是一个模型类,你就不能将它作为字符串保存。但是您可以添加一个getter,将其序列化为字符串……这是因为每次调用prop3的内容/结构都不同。但是您的property3
是一个JSON对象,而不是字符串。你对prop3的内容/结构的意思是什么?每次调用都不同代码>?不过,我需要将prop3保留为字符串,而不是另一个模型“神奇”类,这是因为每次调用prop3的内容/结构都不同。这是非常有趣的方法。谢谢,我会考虑的。
{ "subprperty1": "value" }