• C#读写Json


      C#处理json文件主要有两种方式:

      (1)使用JavaScriptSerializer类,需要引入System.Web.Extension库,并添加下面两个引用:

      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]标记来让某个变量不参与序列化。

  • 相关阅读:
    linux getch()实现
    cppcheck 下载与安装(Liunx)
    apt-get 命令
    nanopb 文档
    VS调试技术
    c 单元测试 check
    GDB 调试
    GCC选项 –I,-l,-L
    作业66
    zhuoye
  • 原文地址:https://www.cnblogs.com/sifenkesi/p/4011889.html
Copyright © 2020-2023  润新知