Json序列化
public class JSONHelper { public static string Serialize<T>(T obj) { var serializer = new DataContractJsonSerializer(obj.GetType()); MemoryStream ms = new MemoryStream(); serializer.WriteObject(ms, obj); string retVal = Encoding.UTF8.GetString(ms.ToArray()); ms.Dispose(); return retVal; } public static T Deserialize<T>(string json) { T obj = Activator.CreateInstance<T>(); MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)); var serializer = new DataContractJsonSerializer(obj.GetType()); obj = (T)serializer.ReadObject(ms); ms.Close(); ms.Dispose(); return obj; } }
发现如果实体类如下:
[Serializable] public class User { public int ID { get; set; } public string Name { get; set; } public string System { get; set; } }
生成的Json属性会带有k__BackingField;
正确的如下:摘抄自http://www.cnblogs.com/jeffwongishandsome/archive/2012/05/31/2529196.html
[Serializable] public class User { private int id; public int ID { get { return id; } set { id = value; } } private string name; public string Name { get { return name; } set { name = value; } } private string system; public string System { get { return system; } set { system = value; } } }
或者
[DataContract] public class User { [DataMember] public int ID { get; set; } [DataMember] public string Name { get; set; } [DataMember] public string System { get; set; } }
但是Serializable方式转化的字段是小写的。
DataContractJsonSerializer的命名空间:System.Runtime.Serialization.Json;