我想要实现的是将JObject转换为XML Document,然后从XMl Document中提取外部xml。这背后的原因是通过Azure Notification Hub将结果作为推送通知发送。
我想要的是:
<toast>
<visual>
<binding template="ToastGeneric">
<text id="1">Message</text>
</binding>
</visual>
</toast>
我尝试过:
JObject notificationPayload = new JObject(
new JProperty("toast",
new JObject(
new JProperty("visual",
new JObject(
new JProperty("binding",
new JObject(
new JProperty("@template", "ToastGeneric"),
new JProperty("text", notificationMessage,
new JProperty("@id", "1")))))))));
上面的代码抛出异常:Can not add Newtonsoft.Json.Linq.JProperty to Newtonsoft.Json.Linq.JArray.
所以我尝试过的是:
JObject notificationPayload = new JObject(
new JProperty("toast",
new JObject(
new JProperty("visual",
new JObject(
new JProperty("binding",
new JObject(
new JProperty("@template", "ToastGeneric"),
new JProperty("text", notificationMessage,
new JObject(
new JProperty("@id", "1"))))))))));
上面的代码给了我一个结果,但不是预期的结果。我得到的是:
<toast>
<visual>
<binding template="ToastGeneric">
<text>Message</text>
<text id="1" />
</binding>
</visual>
</toast>
提取Xml从JObject我使用以下方法:
string jsonStringToConvertToXmlString = JsonConvert.SerializeObject(notificationPayload);
XmlDocument doc = JsonConvert.DeserializeXmlNode(jsonStringToConvertToXmlString);
return doc.OuterXml;
问题:如何将id属性赋予相同的Text属性?
答案 0 :(得分:4)
基本上,不要使用面向JSON的工具来构造XML。如果您已经拥有 JSON,那么使用Json.NET将其转换为XML是有意义的 - 但是当您从头开始构建它时,使用LINQ to XML会更加清晰:
XDocument doc = new XDocument(
new XElement("toast",
new XElement("visual",
new XElement("binding",
new XAttribute("template", "ToastGeneric"),
new XElement("text",
new XAttribute("id", 1),
"Message"
)
)
)
)
);