如何将json反序列化为对象?我的attems最终以JObject而不是具有我的属性的对象为准。我如何避免这种情况?

时间:2019-04-18 11:37:29

标签: 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);

预期结果将是具有ref,action和set属性的对象。实际结果是一个包含JObject的对象

ChildrenTokens 计数 第一
HasValues 持续 下一个 父级 ...

这些不是我的对象的一部分。正确的方法是什么?

此消息中的有效负载是字符串或任意对象。有效负载将被写入数据库,而我不在乎它包含的内容。

4 个答案:

答案 0 :(得分:0)

JObject.Parse生成一个JObject实例。您可以通过两种方式执行此操作,如果已经拥有JObject,则可以执行以下操作:

var obj = JObject.Parse(json);
var command = obj.ToObject<Command>();

或者,您可以使用字符串:

var command = JsonConvert.Deserialize<Command>(json);

答案 1 :(得分:0)

您可以使用以下方法将其反序列化为动态对象:

 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); // "\"

答案 2 :(得分:0)

我们通常使用 这种方法

public static JObject JsonParsed(string Json)
    {
        return JObject.Parse(Json);
    }

答案 3 :(得分:0)

“具有我的属性的对象”是指通常称为POCO。 您必须像这样定义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);

现在,您将从JSON中填充myPoco.RefmyPoco.ActionmyPoco.Payload属性。