Object/Json到xml的转换C#



这可能是一个非常愚蠢的问题,但我找不到任何东西来解决这个问题。

{"Items": [{"id":1},{"id":2}]}

应转换为

<items><element><id>1</id></element><element><id>2</id></element></items>

基本上,我需要元素标记到每个数组项。请用这个来更好地理解。(https://www.freeformatter.com/json-to-xml-converter.html)

我希望这能在C#网络中实现。如果任何第三方有更好的性能,那么这也是可以接受的,但它应该像nuget一样免费。

重要的是向数组的每个项添加一个自定义标记,每个项都应该用一个自定义标签包装。请检查问题中给出的链接,并检查字段"JSON数组条目的元素名称:">

您可以使用Newtonsoft。Json(Nuget包(。。

请参阅下面的链接了解更多信息。http://www.c-sharpcorner.com/blogs/how-to-convert-json-into-xml-or-xml-into-json

如果您直接在C#中有这个字符串,并且您没有使用值,则需要首先对其进行反序列化。JsonConvert使用Newtonsoft。Json。

string dataObj = "{"Items": [{"id":1},{"id":2}]}";
dynamic data = JsonConvert.DeserializeObject(dataObj );

然后,您可以使用下面的webapi函数内部的代码来创建xml。如果您将这些数据传递到C#中的webapi,下面是代码。

您可以简单地使用字符串生成器。

[Route("api/common/JsonToXml")]
[AcceptVerbs("POST")]
public HttpResponseMessage JsonToXml(dynamic data)
{
StringBuilder str = new StringBuilder();
str.Append("<Items>");
for (var ic = 0; ic < data.Items.Count; ic++)
{
str.Append("<element><id>");
str.Append(Convert.ToInt32(data.Items[ic].id));
str.Append("</id></element>");
}
str.Append("</Items>");
return Request.CreateResponse(HttpStatusCode.OK, Convert.ToString(str));
}

或者你可以定义你的类如下。使用Newtonsoft。Json,序列化和反序列化。

public class Items
{
public Items() {
this.element = new List<Element>();
}
public List<Element> element;
}
public class Element
{
public Element(int id) {
this.Id = id;
}
public int Id;
}
[Route("api/common/JsonToXml")]
[AcceptVerbs("POST")]
public HttpResponseMessage JsonToXml(dynamic data)
{
Items list = new Items();
list.element = new List<Element>();
for (var ic = 0; ic < data.Items.Count; ic++)
{
list.element.Add(new Element(Convert.ToInt32(data.Items[ic].id)));
}
XmlDocument xmlData = JsonConvert.DeserializeXmlNode(JsonConvert.SerializeObject(list), "Items");
return Request.CreateResponse(HttpStatusCode.OK, xmlData.OuterXml);
}

使用JsonCovert类可以将json转换为XML

String json = "{"Items": [{"id":1},{"id":2}]}";
XmlDocument doc = 
(XmlDocument)JsonConvert.DeserializeXmlNode(json,"element");
MessageBox.Show(doc.InnerXml.ToString());

在你的情况下,试试这个

String json = "{"Items": [{"id":1},{"id":2}]}";
dynamic parse =  JsonConvert.DeserializeObject(json);
XmlDocument doc = new XmlDocument();
XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
XmlElement root = doc.DocumentElement;
doc.InsertBefore(xmlDeclaration, root);
XmlElement element1 = doc.CreateElement(string.Empty, "root", string.Empty);
doc.AppendChild(element1);
XmlElement element2 = doc.CreateElement(string.Empty, "Items", string.Empty);
element1.AppendChild(element2);
foreach (var Items in parse.Items)
{
XmlElement element22 = doc.CreateElement(string.Empty, "element", string.Empty);
element2.AppendChild(element22);
XmlElement element3 = doc.CreateElement(string.Empty, "id", string.Empty);
XmlText text1 = doc.CreateTextNode(Items.id.ToString());
element3.AppendChild(text1);
element22.AppendChild(element3);
}
MessageBox.Show(doc.InnerXml.ToString());

最新更新