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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值