C#読み書きJson

8855 ワード

C#jsonファイルの処理には主に2つの方法があります.
(1)JavaScriptSerializerクラスを使用するには、System.Web.Extensionライブラリを導入し、次の2つの参照を追加する必要があります.
  using System.Web;  using System.Web.Script.Serialization;
主なコードは次のとおりです.
    public class Data
    {
        public int Id { get; set; }
        // [ScriptIgnore]
        public string Name { get; set; }

        public string GetName()
        {
            return Id.ToString() + Name;
        }
    }

    public class JsonPaserWeb
    {
        // Object->Json
        public string Serialize(Data obj)
        {
            JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
            string json = jsonSerializer.Serialize(obj);
            return json;
        }

        // Json->Object
        public Data Deserialize(string json)
        {
            JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
            //      
            Data obj = jsonSerializer.Deserialize<Data>(json);
            return obj;
        }
    }
[ScriptIgnore]タグを使用すると、変数がシーケンス化に参加しないようにできます.
(2)DataContractJsonSerializerクラスを使用するには、System.Runtime.Serializationライブラリを導入し、次の参照を加える必要があります.
  using System.Runtime.Serialization;  using System.Runtime.Serialization.Json;
サンプルコードは次のとおりです.
  [DataContract]
    public class Data
    {
        [DataMember(Name = "id", Order = 0)]
        public int Id;

        [DataMember(Name = "name", Order = 1)]
        public string Name;

        [DataMember(Name = "child", Order = 2)]
        public Child child = new Child();

        [DataMember(Name = "list", Order = 3)]
        public List<int> Ids = new List<int>();

        [DataMember(Name = "dictionary", Order = 4)]
        public Dictionary<int, Child> dic = new Dictionary<int, Child>();

        [IgnoreDataMember]
        public string Description = "This is a json data class";

    }

    public class Child
    {
        public float Age;
        public string FullName;
    }

    class JsonParserRuntime
    {
        // Object->Json
        public string Serialize(Data obj)
        {
            DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());
            string json = "";
            using (MemoryStream stream = new MemoryStream())
            {
                jsonSerializer.WriteObject(stream, obj);
                json = Encoding.UTF8.GetString(stream.ToArray());
            }
            return json;
        }

        // Json->Object
        public Data Deserialize(string json)
        {
            Data obj = null;
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
            {
                DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Data));
                obj = (Data)jsonSerializer.ReadObject(ms);
            }
            return obj;
        }
    }
[DataContract]タグを使用するクラスでは、[DataMember(Name="id",Order=0)]タグを同時に使用して変数を処理したり、[IgnoreDataMember]タグを使用して変数をシーケンス化しないようにしたりできます.