Object / Json转换为xml转换C#

时间:2017-09-01 05:26:15

标签: c# json xml

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

{"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#dot net中实现这一点。如果任何第三方有更好的表现,那么这也是可以接受的,但它应该像nuget和all一样免费。

重要的是为每个数组项添加自定义标记,每个项应使用自定义标记进行包装。请检查问题中给出的链接,并检查字段&#34; JSON数组条目的元素名称:&#34;

3 个答案:

答案 0 :(得分:0)

你可以使用Newtonsoft.Json(Nuget包)..

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

答案 1 :(得分: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);
        }

答案 2 :(得分: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());