[英]Force JsonConvert.SerializeXmlNode to serialize node value as an Integer or a Boolean
[英]Define attribute and value for standard key-value pair in JSON using JsonConvert.SerializeXmlNode
我知道這可以按預期工作,但是我正在嘗試簡化和減少SerializeXmlNode
輸出。
碼:
XmlDocument XMLDoc = new XmlDocument();
XMLDoc.LoadXml(NewXML);
string EventDataJSON = JsonConvert.SerializeXmlNode(XMLDoc, 0, true);
這是我的XML:
<DataEntries>
<Data Name="Direction">in</Data>
<Data Name="SourceAddress">222.0.0.252</Data>
<Data Name="SourcePort">5355</Data>
<Data Name="DestAddress">192.168.1.24</Data>
</DataEntries>
當前的JSON輸出:
{"@Name":"Direction","#text":"in"},
{"@Name":"SourceAddress","#text":"222.0.0.252"},
{"@Name":"SourcePort","#text":"5355"},
{"@Name":"DestAddress","#text":"192.168.1.24"}
所需的JSON輸出(縮進無關):
{
"Direction":"in",
"SourceAddress":"222.0.0.252",
"SourcePort":"5355",
"DestAddress":"192.168.1.24"
}
如果不需要,我寧願不使用正則表達式,但實際上我對任何事情都持開放態度。 我的另一個選擇是使用JavaScriptSerializer
但是如果JSON.net庫中有實現此目的的方法,那將是首選。
如在JSON和XML之間轉換所述, 如果從JSON創建的XML與您想要的不匹配,那么您將需要手動轉換。 在這種情況下,由於您是預先將XML加載到XmlDocument
中,因此似乎最容易對XML進行如下預處理:
XmlDocument XMLDoc = new XmlDocument();
XMLDoc.LoadXml(NewXML);
foreach (XmlElement entry in XMLDoc.SelectNodes("//DataEntries"))
{
var data = entry.ChildNodes.OfType<XmlElement>().ToList();
foreach (var d in data)
{
var e = XMLDoc.CreateElement(d.Attributes["Name"].Value);
e.InnerText = d.InnerText;
entry.AppendChild(e);
}
foreach (var d in data)
{
entry.RemoveChild(d);
}
}
string EventDataJSON = JsonConvert.SerializeXmlNode(XMLDoc, 0, true);
您可能會考慮切換到更現代的LINQ to XML API。 如果是這樣,您的代碼將如下所示:
var doc = XDocument.Parse(NewXML);
foreach (var entry in doc.Descendants("DataEntries"))
{
var data = entry.Elements("Data").ToList();
foreach (var d in data)
{
entry.Add(new XElement((string)d.Attribute("Name"), d.Value));
}
data.Remove();
}
string EventDataJSON = JsonConvert.SerializeXNode(doc, 0, true);
樣品提琴 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.