.NET-object与Json(反)序列化,键提取

来源:互联网 发布:网络缓存级别最高延迟 编辑:程序博客网 时间:2024/05/22 03:25

数据模型如下:

    [DataContractAttribute]    class Model    {        [DataMember]        public string Key { get; set; }        [DataMember]        public string Value { get; set; }        public Model(string key, string value)        {            this.Key = key;            this.Value = value;        }    }

需要为数据模型添加 DataContractAttribute 特性。

.NET下的 object与Json序列化对象帮助器:

    public  class JsonSerilization    {        // 将Json字符串转换为对象        public static T ToObject<T>(string jsonString)        {            using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))            {                return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);            }        }        // 将对象转成json        public static string ToJson(object jsonObject)        {            if (jsonObject == null) return null;            using (var ms = new MemoryStream())            {                new DataContractJsonSerializer(jsonObject.GetType()).WriteObject(ms, jsonObject);                return Encoding.UTF8.GetString(ms.ToArray());            }        }   }

应用以上对象,将数据对象序列化为Json对象:

List<Model> intances = new List<Model> {new Model("key1", "value1"), new Model("key2", "value2")};            string jsonStr = JsonSerilization.ToJson(intances);            printf("intances转Json串: \n" + jsonStr);

输出结果图:
这里写图片描述

反序列化:

 List<Model> intancesOrgin = JsonSerilization.ToObject<List<Model>>(jsonStr);

提取 intances 的所有键,所有值的string对象:

 string keys = intances .Aggregate<Model, string>(null, (current, instance) => current + instance.Key + ";");            printf("提取所有的键,用分号隔开: \n" + keys);            string values = intances .Aggregate<Model, string>(null, (current, instance) => current + instance.Value + ";");            printf("提取所有的值,用分号隔开: \n" + values);

整个过程输出如下:
这里写图片描述

1 0
原创粉丝点击