Metro應用Json資料處理

來源:互聯網
上載者:User

Windows Phone 8 或者 Windows 8 平台對JSON資料的處理方式基本是一致的,需要使用DataContractJsonSerializer類將對象的執行個體序列化為JSON字串,並將字串還原序列化為對象的執行個體,需要注意的此種處理方式要求Json資料的格式固定的。  

Json字串 => 對象

針對以下Json字串進行資料對象的構造解析

{    "name": "ZhangHui",    "sex": "男",    "cnblogs": {        "address": "http://www.cnblogs.com/huizhang212/",        "age": 2,        "nickname": "宇之樂"    },    "contacts": [        {            "type": "QQ",            "number": "411300114"        },        {            "type": "Email",            "number": "huizhang212@163.com"        }    ]}

1.構造對象

分析上面json資料的格式,可以發現其中包含子物件cnblogs和子物件數組contacts,所以需要構造兩個子物件Cnblogs和Contact,對象代碼如下:

/// <summary>    /// 人員部落格園論壇資訊    /// </summary>    [DataContract]    public class Cnblogs    {        [DataMember]        public String nickname { get; set; }        [DataMember]        public int age { get; set; }        [DataMember]        public String address { get; set; }    }        /// <summary>    /// 人員電話號碼資訊對象    /// </summary>    [DataContract]    public class Contact    {        [DataMember]        public String type { get; set; }        [DataMember]        public String number { get; set; }    }

子物件構建完成後,構建json資料對應的對象,記為:Person,代碼如下:

/// <summary>    /// 人員資訊對象    /// </summary>    [DataContract]    public class Person    {        [DataMember]        public String name { get; set; }        [DataMember]        public String sex { get; set; }        [DataMember]        public Cnblogs cnblogs { get; set; }        [DataMember]        public List<Contact> contacts { get; set; }    }

構造對象必須有[DataContract]聲明,在通過DataContractJsonSerializer進行序號或者反序號的過程中只對有[DataMember]聲明的屬性生效,沒有[DataMember]聲明的屬性將會被忽略,對象屬性的大小寫需要和json資料對應欄位保持一致,否則該屬性的值無法擷取。

2.Json字串轉換Person對象的轉換函式實現

/// <summary>        /// 解析json資料轉化為Person對象        /// </summary>        /// <param name="json"></param>        /// <returns></returns>        public Person getPersionByJson(String json)        {            if (String.IsNullOrEmpty(json))            {                return null;            }                try            {                Person info = new Person();                MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));                DataContractJsonSerializer ser = new DataContractJsonSerializer(info.GetType());                info = ser.ReadObject(ms) as Person;                return info;            }            catch            {                }            return null;        }

返回欄目頁:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/script/

3.調用getPersionByJson方法將Json字串轉換為對象

//Json資料    String json =            @"{                ""name"": ""ZhangHui"",                ""sex"": ""男"",                ""cnblogs"": {                    ""address"": ""http://www.cnblogs.com/huizhang212/"",                    ""age"": 2,                    ""nickname"": ""宇之樂""                },                ""contacts"": [                    {                        ""type"": ""QQ"",                        ""number"": ""411300114""                    },                    {                        ""type"": ""Email"",                        ""number"": ""huizhang212@163.com""                    }                ]            }";    //json資料轉換為Person對象    Person person = getPersionByJson(json);

對象 => Json字串

通過DataContractJsonSerializer可以直接將對象轉換為Json字串。

1.Person對象轉換Json字串的函數實現

/// <summary>        /// 獲Person對象的Json資料        /// </summary>        /// <param name="normal"></param>        /// <returns></returns>        public String getJsonByPerson(Person person)        {            String json = String.Empty;            try            {                MemoryStream ms = new MemoryStream();                DataContractJsonSerializer ser = new DataContractJsonSerializer(person.GetType());                ser.WriteObject(ms, person);                ms.Position = 0;                using (StreamReader s = new StreamReader(ms))                {                    json = s.ReadToEnd();                }            }            catch            {                }            return json;        }

2.調用getJsonByPerson方法將Person對象轉換為Json字串

//構建一個Persion對象    Person person = new Person()    {        name = "ZhangHui",        sex = "男",        cnblogs = new Cnblogs()        {            nickname = "宇之樂",            age = 2,            address = "http://www.cnblogs.com/huizhang212/"        },        contacts = new List<Contact>()         {            new Contact(){ type="QQ", number="411300114" },            new Contact(){ type="Email", number="huizhang212@163.com" }        }    };    //轉換為json資料    String personJson = getJsonByPerson(person);

作者:宇之樂

出處:http://www.cnblogs.com/huizhang212/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.