C#JSONとオブジェクト間の変換

12401 ワード

1.まず宣言ユーザ情報オブジェクト,DataContract修飾クラスはJSON,DataMember修飾属性,Orderは解析の順序,またLoverは配列リスト,ガールフレンド個数を表す
Address       ,DailyRecord        
 
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
namespace FunctionTest.Model
{
    [DataContract]
    public  class UserInfo
    {
        [DataMember(Order =0)]
        public string UserName { get; set; }
        [DataMember(Order = 1)]
        public int Age { get; set; }
        [DataMember(Order = 2)]
        public int Gender { get; set; }
        [DataMember(Order =3)]
        public List<string> Lover { get; set; }
        [DataMember(Order = 4)]
        public ContactAddress Address { get; set; }
        [DataMember(Order = 5)]
        public Dictionary<string, string> DailyRecord {
            get; set;
        }
    }
   
    [DataContract]
    public class ContactAddress
    {
        [DataMember(Order =0)]
        public string Province { get; set; }
        [DataMember(Order = 1)]
        public string City { get; set; }
        [DataMember(Order = 2)]
        public string Country { get; set; }
        [DataMember(Order = 3)]
        public string Details { get; set; }
    }
}

 
2.JSONヘルプクラスコアコード
      /// <summary>
      /// Json     
      /// </summary>
      /// <typeparam name="T"></typeparam>
      /// <param name="jsonText"></param>
      /// <returns></returns>
        public static T JsonToObject<T>(string jsonText)
        {
            DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(T));
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText));
            T obj = (T)s.ReadObject(ms);
            ms.Dispose();
            return obj;
        }
        /// <summary>
        ///      JSON
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string ObjectToJSON<T>(T obj)
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
            string result = string.Empty;
            using (MemoryStream ms = new MemoryStream())
            {
                serializer.WriteObject(ms, obj);
                ms.Position = 0;

                using (StreamReader read = new StreamReader(ms))
                {
                    result = read.ReadToEnd();
                }
            }
            return result;
        }

3.呼び出し
 
            //1.  -->JSON
            UserInfo info = new UserInfo
            {
                Age = 10,
                Gender = 1,
                UserName = "   ",
                Lover = new List<string> { "  1", "  2", "  3" },
                Address = new ContactAddress
                {
                    Province = "   ",
                    City = "   ",
                    Country = "   ",
                    Details = "           "
                },
                DailyRecord = new Dictionary<string, string> { { "   ", "  " }, { "   ", "   " }, { "   ", "   " } }
            };
        
            string json = ObjectToJSON<UserInfo>(info);

 4.逆シーケンス化された結果
{"UserName":"   ","Age":10,"Gender":1,"Lover":["  1","  2","  3"],"Address":{"Province":"   ","City":"   ","Country":"   ","Details":"           "},"DailyRecord":[{"Key":"   ","Value":"  "},{"Key":"   ","Value":"   "},{"Key":"   ","Value":"   "}]}