C# 如何将json反序列化为对象?我的attemt最终是一个JObject,而不是一个具有我的属性的对象。我如何避免这种情况?

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

我想转换如下内容:{“ref\”:“/my/path\”,“action\”:“set\”,“payload\”:“\”}

转换为C#中的泛型对象。我试过的是这个

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。