我想转换这样的{\"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
持续
下一个
父级
...
这些不是我的对象的一部分。正确的方法是什么?
此消息中的有效负载是字符串或任意对象。有效负载将被写入数据库,而我不在乎它包含的内容。
答案 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.Ref
,myPoco.Action
,myPoco.Payload
属性。