数据模型如下:
[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);
整个过程输出如下: