我有以下格式的xml数据:
<coll>
<item>
<key>description</key>
<value>one</value>
</item>
<item>
<key>name</key>
<value>John</value>
</item>
<item>
<key>lastName</key>
<value>Peter</value>
</item>
<item>
<key>institutionCode</key>
<value>cliente_test</value>
</item>
</coll>
我使用以下代码将其转换为json:
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = JsonConvert.SerializeXmlNode(doc);
这给了我json值:
{
"coll": {
"item": [
{
"key": "description",
"value": "one"
},
{
"key": "name",
"value": "John"
},
{
"key": "lastName",
"value": "Peter"
},
{
"key": "institutionCode",
"value": "cliente_test"
}
]
}
}
有没有办法从上面的xml:
获取以下格式的json{
"description" : "one",
"name" : "John",
"lastName" : "Peter",
"institutionCode" : "cliente_test"
}
或者进入以下c#对象:
public class Data
{
[JsonProperty("description")]
public string Description { get; set; }
[JsonProperty("institutionCode")]
public string InstitutionCode { get; set; }
[JsonProperty("lastName")]
public string LastName { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
感谢任何形式的帮助。
答案 0 :(得分:3)
var xDoc = XDocument.Load(filename);
var dict = xDoc.Descendants("item").ToDictionary(x => (string)x.Element("key"),
x => (string)x.Element("value"));
var json = JsonConvert.SerializeObject(dict);
OR
var data = JObject.FromObject(dict).ToObject<Data>();
答案 1 :(得分:0)
您在XML中拥有的是项目值的集合。这就是为什么它被转换为json中的列表。除了自己实现它之外别无他法,但这不是一项艰巨的任务。你可以将数据读入字典,然后将其转换为json。 做这样的事情
xmldoc.Load(xmlfile);
xmlnode = xmldoc.GetElementsByTagName("item");
dynamic node= new ExpandoObject();
var dictionary = (IDictionary<string, object>)node;
for (int i = 0; i < xmlnode.Count; i++)
{
dictionary.Add(xmlnode[i].ChildNodes.Item(0).InnerText, xmlnode[i].ChildNodes.Item(1).InnerText)
}
var json = JsonConvert.SerializeObject(dictionary);