【问题标题】:Object/Json to xml conversion C#对象/Json 到 xml 转换 C#
【发布时间】:2023-03-04 21:47:01
【问题描述】:

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

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

应该转换成

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

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

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

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

【问题讨论】:

标签: c# json xml


【解决方案1】:

您可以为此使用 Newtonsoft.Json(Nuget 包)..

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

【讨论】:

    【解决方案2】:

    如果你在 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);
            }
    

    【讨论】:

    • 您是否知道任何内置/第三方功能/dll 可以使其通用?
    • JsonConvert 使用 Newtonsoft.Json
    • 在这我们有能力实现这个“12” ??如果是,请告诉我我可以使用的函数的属性。
    • 对于 stringbuilder 部分,Convert.ToString(str) 是您的字符串。对于下一部分,xmlData.OuterXml 给出了这个输出。
    • @Prince 已编辑为包含简单 C# 字符串大小写的大小写。
    【解决方案3】:

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

    【讨论】:

    • 12
    • 这是你的结果。
    • 更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 2018-04-16
    • 2014-12-18
    • 2020-09-29
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    相关资源
    最近更新 更多