1 頁 (共 1 頁)

Convert Object to {Xml/Json} <==> {Xml/Json} to Object

發表於 : 週四 10月 07, 2010 2:47 pm
rusli
轉換相關說明如下

User.cs

發表於 : 週四 10月 07, 2010 5:19 pm
rusli

代碼: 選擇全部

  using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Runtime.Serialization;
    using System.Runtime.Serialization.Json;
    using System.Text;
    using System.Xml;
    using System.Xml.Linq;
    using System.Xml.Serialization;

    [Serializable]
    [DataContract]
    public class User
    {
        [DataMember]
        public string Email { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public List<ElectronicAddr> ElectronicAddrs { get; set; }

        public static string ObjectToJson<T>(T[] t)
        {
            string result;

            //Create a stream to serialize the object to.
            using (var ms = new MemoryStream())
            {
                // Serializer the User object to the stream.
                var ser = new DataContractJsonSerializer(typeof(T[]));
                ser.WriteObject(ms, t);
                result = Encoding.UTF8.GetString(ms.ToArray());
                ms.Close();
            }
            return result;
        }

        public static string ObjectToXML<T>(T[] t)
        {
            string result = string.Empty;
            //// Set the public property values.
            using (MemoryStream stream = new MemoryStream(500))
            {
                using (var xmlWriter = XmlTextWriter.Create(stream,
                                                            new XmlWriterSettings()
                                                            {
                                                                OmitXmlDeclaration = true,
                                                                Encoding = Encoding.UTF8,
                                                                Indent = true
                                                            }))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(T[]));
                    //// Serialize the object, and close the TextWriter.
                    serializer.Serialize(xmlWriter, t);
                }
                result = Encoding.UTF8.GetString(stream.ToArray());
            }
            return result;
        }


        public static T[] JsonToObject<T>(string json)
        {
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
            return new DataContractJsonSerializer(typeof(T[])).ReadObject(ms) as T[];
        }

        public static T[] XmlToObject<T>(string xmlString)
        {
            var xmlRoot = XElement.Parse(xmlString);
            return new XmlSerializer(typeof(T[])).Deserialize(xmlRoot.CreateReader()) as T[];
        }
    }

ObjectToJson

發表於 : 週四 10月 07, 2010 5:22 pm
rusli
使用方法:

代碼: 選擇全部


   //// 物件 轉換成 Json
            string JsonString = User.ObjectToJson<User>(
                new[]
                    {
                        new User
                            {
                                Name = "Widget",
                                Email = "Regular Widget",
                                ElectronicAddrs = new List<ElectronicAddr>()
                                                      {
                                                          new ElectronicAddr()
                                                              {
                                                                  City = "MyCity0",
                                                                  Addr = "MyAddr0"
                                                              },
                                                          new ElectronicAddr()
                                                              {
                                                                  City = "MyCity1",
                                                                  Addr = "MyAddr1"
                                                              },
                                                      }
                            }
                    });



輸出結果:

代碼: 選擇全部


[{"ElectronicAddrs":[{"Addr":"MyAddr0","City":"MyCity0"},{"Addr":"MyAddr1","City":"MyCity1"}],"Email":"Regular Widget","Name":"Widget"}]



ObjectToXML

發表於 : 週四 10月 07, 2010 5:23 pm
rusli
使用方法:

代碼: 選擇全部


            //// 物件 轉換成 XML
            string xmlString = User.ObjectToXML<User>(
                new[]
                    {
                        new User
                            {
                                Name = "Widget",
                                Email = "Regular Widget",
                                ElectronicAddrs = new List<ElectronicAddr>()
                                                      {
                                                          new ElectronicAddr()
                                                              {
                                                                  City = "MyCity0",
                                                                  Addr = "MyAddr0"
                                                              },
                                                          new ElectronicAddr()
                                                              {
                                                                  City = "MyCity1",
                                                                  Addr = "MyAddr1"
                                                              },
                                                      }
                            }
                    });




xmlString 輸出結果

代碼: 選擇全部

<ArrayOfUser xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <User>
    <Email>Regular Widget</Email>
    <Name>Widget</Name>
    <ElectronicAddrs>
      <ElectronicAddr>
        <City>MyCity0</City>
        <Addr>MyAddr0</Addr>
      </ElectronicAddr>
      <ElectronicAddr>
        <City>MyCity1</City>
        <Addr>MyAddr1</Addr>
      </ElectronicAddr>
    </ElectronicAddrs>
  </User>
</ArrayOfUser>

JsonToObject

發表於 : 週四 10月 07, 2010 5:36 pm
rusli

代碼: 選擇全部


            string inputData = string.Empty;
            inputData = "[{\"ElectronicAddrs\":[{\"Addr\":\"MyAddr0\",\"City\":\"MyCity0\"},{\"Addr\":\"MyAddr1\",\"City\":\"MyCity1\"}],\"Email\":\"Regular Widget\",\"Name\":\"Widget\"}]";
            User[] JsonList = User.JsonToObject<User>(inputData);


XmlToObject

發表於 : 週四 10月 07, 2010 5:36 pm
rusli

代碼: 選擇全部

    inputData = @"<ArrayOfUser xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
                          <User>
                            <Email>Regular Widget</Email>
                            <Name>Widget</Name>
                            <ElectronicAddrs>
                              <ElectronicAddr>
                                <City>MyCity0</City>
                                <Addr>MyAddr0</Addr>
                              </ElectronicAddr>
                              <ElectronicAddr>
                                <City>MyCity1</City>
                                <Addr>MyAddr1</Addr>
                              </ElectronicAddr>
                            </ElectronicAddrs>
                          </User>
                        </ArrayOfUser>";

            User[] XmlList = User.XmlToObject<User>(inputData);