C# Object to Json to Xml,如何为数组项生成xml元素
Posted
技术标签:
【中文标题】C# Object to Json to Xml,如何为数组项生成xml元素【英文标题】:C# Object to Json to Xml, how to generate xml element for array items 【发布时间】:2020-05-06 02:30:35 【问题描述】:我先将一个对象转换为json,然后再将json转换为xml。我需要这样做来生成一些属性作为 xml 属性而不是元素。一切都按预期工作,只是我无法为每个项目生成单独的 xml 元素。
C#代码:
string json = JsonConvert.SerializeObject(myObj);
XmlDocument xdoc = JsonConvert.DeserializeXmlNode(json, "root");
生成的json:
"header": "myheader",
"transaction":
"date": "2019-09-24",
"items": [
"number": "123",
"unit": "EA",
"qty": 6
,
"number": "456",
"unit": "CS",
"qty": 4
]
C# 类:
public class Item
[JsonProperty("@number")]
public string number get; set;
[JsonProperty("@unit")]
public string unit get; set;
[JsonProperty("@qty")]
public int qty get; set;
public class Transaction
[JsonProperty("@date")]
public string date get; set;
public List<Item> items get; set;
public class Root
public string header get; set;
public Transaction transaction get; set;
生成的(不需要的)输出:
<root>
<header>string</header>
<transaction date="string">
<items number="string" unit="string" qty="0"/>
<items number="string" unit="string" qty="0"/>
</transaction>
</root>
预期输出:
<root>
<header>string</header>
<transaction date="string">
<items>
<item number="string" unit="string" qty="0"/>
<item number="string" unit="string" qty="0"/>
</items>
</transaction>
</root>
【问题讨论】:
我认为下面的讨论应该对你有所帮助。 ***.com/questions/38726166/… 它有帮助。它按预期工作。 【参考方案1】:按照@Abhineet Chaudhary 推荐的link 上的说明进行操作。 它按预期工作。
var jObject = JObject.Parse(json);
jObject.SelectToken("transaction").SelectTokens("items").WrapWithObjects("item");
var finalXml = jObject.ToXElement("root", false);
public static class JsonExtensions
public static void WrapWithObjects(this IEnumerable<JToken> values, string name)
foreach (var value in values.ToList())
var newParent = new JObject();
if (value.Parent != null)
value.Replace(newParent);
newParent[name] = value;
public static XElement ToXElement(this JObject obj, string deserializeRootElementName = null, bool writeArrayAttribute = false)
if (obj == null)
return null;
using (var reader = obj.CreateReader())
return JsonExtensions.DeserializeXElement(reader, deserializeRootElementName, writeArrayAttribute);
static XElement DeserializeXElement(JsonReader reader, string deserializeRootElementName, bool writeArrayAttribute)
var converter = new Newtonsoft.Json.Converters.XmlNodeConverter() DeserializeRootElementName = deserializeRootElementName, WriteArrayAttribute = writeArrayAttribute ;
var jsonSerializer = JsonSerializer.CreateDefault(new JsonSerializerSettings Converters = new JsonConverter[] converter );
return jsonSerializer.Deserialize<XElement>(reader);
【讨论】:
以上是关于C# Object to Json to Xml,如何为数组项生成xml元素的主要内容,如果未能解决你的问题,请参考以下文章