如何正确地为JObject中的其他属性分配属性



我试图实现的是将JObject转换为XML文档,然后从XML文档中提取外部XML。这背后的原因是通过Azure通知中心将结果作为推送通知发送。

我想得到的是:

<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>

要从JObject中提取Xml,我使用以下方法:

string jsonStringToConvertToXmlString = JsonConvert.SerializeObject(notificationPayload);
XmlDocument doc = JsonConvert.DeserializeXmlNode(jsonStringToConvertToXmlString);
return doc.OuterXml;

问题:如何将id属性赋予相同的Text属性

基本上,不要使用面向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"
)
)
)
)
);

相关内容

  • 没有找到相关文章

最新更新