Fork me on GitHub

C#JSON与XML转换

C#JSON转XML

输入:[{\'name\': \'yancy\',\'value\': \'0\'},{\'name\': \'jieny\',\'value\': \'1\'}]

string str = "[{\'name\': \'yancy\',\'value\': \'0\'},{\'name\': \'jieny\',\'value\': \'1\'}]";

调用方法:GetCustomItemSpecifics(str)

 

输出:<?xml version="1.0" encoding="utf-8"?><CustomItemSpecifics xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ItemSpecifics><NameValueListType><Name xmlns="urn:ebay:apis:eBLBaseComponents">yancy</Name><Value xmlns="urn:ebay:apis:eBLBaseComponents">0</Value></NameValueListType><NameValueListType><Name xmlns="urn:ebay:apis:eBLBaseComponents">jieny</Name><Value xmlns="urn:ebay:apis:eBLBaseComponents">1</Value></NameValueListType></ItemSpecifics></CustomItemSpecifics>

 代码:

GetCustomItemSpecifics

public static string GetCustomItemSpecifics(string str)
        {
            DataTable dt= JsonConvert.DeserializeObject<DataTable>(str);

            List<Json2Xml.NameValueListType> nvl = new List<Json2Xml.NameValueListType>();

            foreach (DataRow dr in dt.Rows)
            {
                Json2Xml.NameValueListType nv = new Json2Xml.NameValueListType();

                string sName = dr["Name"].ToString();
                string sValue = dr["Value"].ToString();

                if (sName != string.Empty && sValue != string.Empty)
                {
                    nv.Name = sName;
                    nv.Value = new string[] { sValue };
                    nvl.Add(nv);
                }
            }

            if (nvl.Count == 0)
            {
                return string.Empty;
            }
            else
            {
                Json2Xml.CustomItemSpecifics t = new Json2Xml.CustomItemSpecifics();
                t.ItemSpecifics = nvl.ToArray();
                return Json2Xml.ObjectToText(t, typeof(Json2Xml.CustomItemSpecifics));
            }
        }

Json2Xml.cs

using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApp1
{
    public class Json2Xml
    {
        [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.7.2612.0")]
        [System.SerializableAttribute()]
        [System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:ebay:apis:eBLBaseComponents")]
        public enum ItemSpecificSourceCodeType
        {

            /// <remarks/>
            ItemSpecific,

            /// <remarks/>
            Attribute,

            /// <remarks/>
            Product,

            /// <remarks/>
            CustomCode,
        }

        [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.7.2612.0")]
        [System.SerializableAttribute()]
        [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.ComponentModel.DesignerCategoryAttribute("code")]
        [System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:ebay:apis:eBLBaseComponents")]
        public partial class NameValueListType
        {

            private string nameField;

            private string[] valueField;

            private ItemSpecificSourceCodeType sourceField;

            private bool sourceFieldSpecified;

            private System.Xml.XmlElement[] anyField;

            /// <remarks/>
            public string Name
            {
                get
                {
                    return this.nameField;
                }
                set
                {
                    this.nameField = value;
                }
            }

            /// <remarks/>
            [System.Xml.Serialization.XmlElementAttribute("Value")]
            public string[] Value
            {
                get
                {
                    return this.valueField;
                }
                set
                {
                    this.valueField = value;
                }
            }

            /// <remarks/>
            public ItemSpecificSourceCodeType Source
            {
                get
                {
                    return this.sourceField;
                }
                set
                {
                    this.sourceField = value;
                }
            }

            /// <remarks/>
            [System.Xml.Serialization.XmlIgnoreAttribute()]
            public bool SourceSpecified
            {
                get
                {
                    return this.sourceFieldSpecified;
                }
                set
                {
                    this.sourceFieldSpecified = value;
                }
            }

            /// <remarks/>
            [System.Xml.Serialization.XmlAnyElementAttribute()]
            public System.Xml.XmlElement[] Any
            {
                get
                {
                    return this.anyField;
                }
                set
                {
                    this.anyField = value;
                }
            }
        }

        public class CustomItemSpecifics
        {
            public NameValueListType[] ItemSpecifics;
        }

        public class Item
        {
            public string Name { get; set; }

            public string Value { get; set; }

            public string[] RecommValues { get; set; }

            //public void DataTable2Entity(Item item, DataRow dr) {
            //    item.Name=dr.
            //}
        }

        public static string ObjectToText(Object inObject, Type inType)
        {
            String XmlizedString = null;
            MemoryStream ms = new MemoryStream();
            XmlSerializer xs = new XmlSerializer(inType);
            XmlTextWriter xmlTextWriter = new XmlTextWriter(ms, Encoding.UTF8);
            xs.Serialize(xmlTextWriter, inObject);
            ms = (MemoryStream)xmlTextWriter.BaseStream;
            XmlizedString = UTF8ByteArrayToString(ms.ToArray());

            return XmlizedString;
        }

        private static String UTF8ByteArrayToString(Byte[] characters)
        {
            UTF8Encoding encoding = new UTF8Encoding();
            String constructedString = encoding.GetString(characters);

            if (constructedString.Length > 0)
            {
                constructedString = constructedString.Substring(1);
            }
            return (constructedString);
        }

        public static Object TextToObject(string inText, Type inType)
        {
            try
            {
                if (string.IsNullOrEmpty(inText))
                {
                    return null;
                }
                else
                {
                    XmlSerializer xs = new XmlSerializer(inType);
                    MemoryStream ms = new MemoryStream(StringToUTF8ByteArray(inText));
                    XmlTextWriter xmlTextWriter = new XmlTextWriter(ms, Encoding.UTF8);
                    return (Object)xs.Deserialize(ms);
                }
            }
            catch
            {
                return null;
            }
        }
        private static byte[] StringToUTF8ByteArray(string inText)
        {
            UTF8Encoding encoding = new UTF8Encoding();
            Byte[] byteArray = encoding.GetBytes(inText);

            return byteArray;
        }
    }
}

 

C#XML转JSON

输入:<?xml version="1.0" encoding="utf-8"?><CustomItemSpecifics xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ItemSpecifics><NameValueListType><Name xmlns="urn:ebay:apis:eBLBaseComponents">yancy</Name><Value xmlns="urn:ebay:apis:eBLBaseComponents">0</Value></NameValueListType><NameValueListType><Name xmlns="urn:ebay:apis:eBLBaseComponents">jieny</Name><Value xmlns="urn:ebay:apis:eBLBaseComponents">1</Value></NameValueListType></ItemSpecifics></CustomItemSpecifics>

调用方法:XmlToJSON(doc)

输出:{ "CustomItemSpecifics": {"ItemSpecifics": { "NameValueListType": [ {"Name": {"value": "yancy", "xmlns": "urn:ebay:apis:eBLBaseComponents" }, "Value": {"value": "0", "xmlns": "urn:ebay:apis:eBLBaseComponents" } }, {"Name": {"value": "jieny", "xmlns": "urn:ebay:apis:eBLBaseComponents" }, "Value": {"value": "1", "xmlns": "urn:ebay:apis:eBLBaseComponents" } } ] }, "xmlns:xsd": "http:\/\/www.w3.org\/2001\/XMLSchema", "xmlns:xsi": "http:\/\/www.w3.org\/2001\/XMLSchema-instance" }}

 

 代码:

XmlToJSONHelper.cs

using System.Collections;
using System.Text;
using System.Xml;

namespace ConsoleApp1
{
    public class XmlToJSONHelper
    {
        public static string XmlToJSON(XmlDocument xmlDoc)
        {
            StringBuilder sbJSON = new StringBuilder();
            sbJSON.Append("{ ");
            XmlToJSONnode(sbJSON, xmlDoc.DocumentElement, true);
            sbJSON.Append("}");
            return sbJSON.ToString();
        }

        public static void XmlToJSONnode(StringBuilder sbJSON, XmlElement node, bool showNodeName)
        {
            if (showNodeName)
                sbJSON.Append("\"" + SafeJSON(node.Name) + "\": ");
            sbJSON.Append("{");

            SortedList childNodeNames = new SortedList();

            if (node.Attributes != null)
                foreach (XmlAttribute attr in node.Attributes)
                    StoreChildNode(childNodeNames, attr.Name, attr.InnerText);

            foreach (XmlNode cnode in node.ChildNodes)
            {
                if (cnode is XmlText)
                    StoreChildNode(childNodeNames, "value", cnode.InnerText);
                else if (cnode is XmlElement)
                    StoreChildNode(childNodeNames, cnode.Name, cnode);
            }
            foreach (string childname in childNodeNames.Keys)
            {
                ArrayList alChild = (ArrayList)childNodeNames[childname];
                if (alChild.Count == 1)
                    OutputNode(childname, alChild[0], sbJSON, true);
                else
                {
                    sbJSON.Append(" \"" + SafeJSON(childname) + "\": [ ");
                    foreach (object Child in alChild)
                        OutputNode(childname, Child, sbJSON, false);
                    sbJSON.Remove(sbJSON.Length - 2, 2);
                    sbJSON.Append(" ], ");
                }
            }
            sbJSON.Remove(sbJSON.Length - 2, 2);
            sbJSON.Append(" }");
        }

        public static void StoreChildNode(SortedList childNodeNames, string nodeName, object nodeValue)
        {
            if (nodeValue is XmlElement)
            {
                XmlNode cnode = (XmlNode)nodeValue;
                if (cnode.Attributes.Count == 0)
                {
                    XmlNodeList children = cnode.ChildNodes;
                    if (children.Count == 0)
                        nodeValue = null;
                    else if (children.Count == 1 && (children[0] is XmlText))
                        nodeValue = ((XmlText)(children[0])).InnerText;
                }
            }
            object oValuesAL = childNodeNames[nodeName];
            ArrayList ValuesAL;
            if (oValuesAL == null)
            {
                ValuesAL = new ArrayList();
                childNodeNames[nodeName] = ValuesAL;
            }
            else
                ValuesAL = (ArrayList)oValuesAL;
            ValuesAL.Add(nodeValue);
        }

        public static void OutputNode(string childname, object alChild, StringBuilder sbJSON, bool showNodeName)
        {
            if (alChild == null)
            {
                if (showNodeName)
                    sbJSON.Append("\"" + SafeJSON(childname) + "\": ");
                sbJSON.Append("null");
            }
            else if (alChild is string)
            {
                if (showNodeName)
                    sbJSON.Append("\"" + SafeJSON(childname) + "\": ");
                string sChild = (string)alChild;
                sChild = sChild.Trim();
                sbJSON.Append("\"" + SafeJSON(sChild) + "\"");
            }
            else
                XmlToJSONnode(sbJSON, (XmlElement)alChild, showNodeName);
            sbJSON.Append(", ");
        }

        public static string SafeJSON(string sIn)
        {
            StringBuilder sbOut = new StringBuilder(sIn.Length);
            foreach (char ch in sIn)
            {
                if (char.IsControl(ch) || ch == '\'')
                {
                    int ich = (int)ch;
                    sbOut.Append(@"\u" + ich.ToString("x4"));
                    continue;
                }
                else if (ch == '\"' || ch == '\\' || ch == '/')
                { sbOut.Append('\\'); }

                sbOut.Append(ch);
            }
            return sbOut.ToString();
        }

        public static void StoreChildNode(IDictionary childNodeNames, string nodeName, object nodeValue)
        {
            ArrayList list2;
            if (nodeValue is XmlElement)
            {
                XmlNode node = (XmlNode)nodeValue;
                if (node.Attributes.Count == 0)
                {
                    XmlNodeList childNodes = node.ChildNodes;
                    if (childNodes.Count == 0)
                    {
                        nodeValue = null;

                    }
                    else if ((childNodes.Count == 1) && (childNodes[0] is XmlText))
                    {

                        nodeValue = childNodes[0].InnerText;

                    }

                }
            }
            object obj2 = childNodeNames[nodeName];
            if (obj2 == null)
            {
                list2 = new ArrayList();
                childNodeNames[nodeName] = list2;
            }
            else
            {
                list2 = (ArrayList)obj2;
            }
            list2.Add(nodeValue);
        }
    }
}

 

posted @ 2018-06-25 11:37  Yancy317  阅读(2342)  评论(0编辑  收藏  举报