2017-09-01 99 views
0

这可能是一个非常愚蠢的问题,但我无法找到任何解决方法。对象/ 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和all一样是免费的。

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

+0

JsonConvert.DeserializeXNode。使用Newtonsoft – Ramankingdom

+0

[如何将JSON转换为XML或XML到JSON?](https://stackoverflow.com/questions/814001/how-to-convert-json-to-xml-or-xml-to- json) –

+0

https://www.newtonsoft.com/json/help/html/ConvertJsonToXml.htm – Ramankingdom

回答

0

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

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

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

你可以简单地使用一个stringbuilder。

[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); 
     } 
+0

是否有任何内置/第三方功能/ dll可以使其具有通用性? – Prince

+0

JsonConvert使用Newtonsoft.Json – Amit

+0

在这做,我们必须实现这个 “” 的能力?如果可以,请告诉我我可以使用的功能的属性。 – Prince

0

使用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()); 
+0

Prince

+0

这是乌尔结果。 – Prince

+0

更新了我的答案 – Znaneswar