C# 如何将json反序列化为对象?我的attemt最终是一个JObject,而不是一个具有我的属性的对象。我如何避免这种情况?
我想转换如下内容:{“ref\”:“/my/path\”,“action\”:“set\”,“payload\”:“\”} 转换为C#中的泛型对象。我试过的是这个C# 如何将json反序列化为对象?我的attemt最终是一个JObject,而不是一个具有我的属性的对象。我如何避免这种情况?,c#,json,serialization,dynamic,C#,Json,Serialization,Dynamic,我想转换如下内容:{“ref\”:“/my/path\”,“action\”:“set\”,“payload\”:“\”} 转换为C#中的泛型对象。我试过的是这个 object mess1 = JObject.Parse(message); dynamic mess2 = JsonConvert.DeserializeObject<object>(message); dynamic mess3 = JValue.Parse(message); objectmess1=JObje
object mess1 = JObject.Parse(message);
dynamic mess2 = JsonConvert.DeserializeObject<object>(message);
dynamic mess3 = JValue.Parse(message);
objectmess1=JObject.Parse(消息);
动态消息2=JsonConvert.DeserializeObject(消息);
动态mess3=JValue.Parse(消息);
预期结果将是一个具有ref、action和set属性的对象。实际结果是一个包含JObject的对象
儿童乐园
计数
首先有价值观 最后的 下一个 父母亲 这些不是我的目标的一部分。正确的做法是什么
此消息中的有效负载是字符串或任意对象。有效负载将被写入数据库,我不关心它包含什么。
JObject.Parse
生成一个JObject
实例。您可以通过两种方式完成此操作,如果您已经有了JObject
,则可以执行以下操作:
var obj = JObject.Parse(json);
var command = obj.ToObject<Command>();
var obj=JObject.Parse(json);
var命令=obj.ToObject();
或者,您可以使用以下字符串:
var command = JsonConvert.Deserialize<Command>(json);
var命令=JsonConvert.Deserialize(json);
您可以使用以下命令将其反序列化为动态对象:
dynamic parsed = JObject.Parse("ref\":\"/my/path\",\"action\":\"set\",\"payload\":\"\");
并像访问任何其他对象一样访问您的属性:
Console.WriteLine(parsed.ref); // "/my/path/"
Console.WriteLine(parsed.action); // "set"
Console.WriteLine(parsed.payload); // "\"
我们通常使用
这种方法
public static JObject JsonParsed(string Json)
{
return JObject.Parse(Json);
}
你所说的“具有我的属性的对象”是指通常所说的。
您必须这样定义POCO对象:
public class Poco
{
public string Ref { get; set; }
public string Action { get; set; }
public string Payload { get; set; }
}
然后反序列化JSON,如下所示:
string json = "{'ref':'/my/path','action':'set','payload':''}";
Poco myPoco = JsonConvert.DeserializeObject<Poco>(json);
string json=“{'ref':'/my/path','action':'set','payload':'''}”;
Poco myPoco=JsonConvert.DeserializeObject(json);
现在,您将拥有从JSON填充的
myPoco.Ref
,myPoco.Action
,myPoco.Payload
属性。这些属性不是JSON中的JObject
。显示您的代码。您可以使用类似JsonConvert.DeserializeObject(您的JSON字符串)的东西;或者添加适当的Json/JObject数据。因此,请轻松理解。在这种情况下,我不希望有特定的类型。在javascript中,我可以简单地执行var obj=JSON.parse(jsonstring);在C#中也一定有类似的东西?好的。我编辑了我的答案,将其反序列化为一个动态对象,而不是一个具体的类。dynamic parsed=JObject.Parse(“{\”ref\“:\”/my/path\”,“action\”:“set\”,“payload\”:“\”);将其转换为JObject,而不是具有ref、set和payload属性的对象。不希望将其转换为特定类的原因是此对象上的负载是任意对象。我不在乎它包含什么,它是要写入数据库的。但这给了我一个作业对象?我无法访问对象上的属性ref、action或payload。