1.序列化
VehicleModelSearchingModel model = new VehicleModelSearchingModel() { brandId = 0, modelIds="0", yearIds="0", startTime=DateTime.Parse("2016-04-01").ToString(), endTime = DateTime.Now.ToString(), plateColor = 0, hasPlate = 1, plateNumber = "", vehicleColor = "", sourceIds = "" }; string s = JsonConvert.SerializeObject(model); Console.WriteLine(s);
其中,VehicleModelSearchingModel类:
[JsonObject(MemberSerialization.OptIn)] public class VehicleModelSearchingModel { [JsonProperty(propertyName: "resourceUuid")] public string sourceIds { get; set; } [JsonProperty(propertyName:"brandId")] public int? brandId { get; set; } public string brandId_str { get; set; } [JsonProperty(propertyName: "modelId")] public string modelIds { get; set; } public string modelIds_str { get; set; } [JsonProperty(propertyName: "vehicleYearId")] public string yearIds { get; set; } public string yearIds_str { get; set; } [JsonProperty(propertyName: "timeBegin")] public string startTime { get; set; } [JsonProperty(propertyName: "timeEnd")] public string endTime { get; set; } [JsonProperty(propertyName: "lpColor")] public int plateColor { get; set; } [JsonProperty(propertyName: "lp")] public string plateNumber { get; set; } [JsonProperty(propertyName: "haslp")] public int hasPlate { get; set; } [JsonProperty(propertyName: "vehicleColor")] public string vehicleColor { get; set; } public int confidence { get; set; } public bool isExactQuery { get; set; } public string orderby { get; set; } }
2.反序列化
string s = "{"code":204,"msg":"没有符合条件的数据!","resData":null}"; RetErr ret = JsonConvert.DeserializeObject<RetErr>(s); Console.WriteLine("{0},{1}", ret.ABC, ret.msg);
其中RetErr类:
class RetErr { [JsonProperty(propertyName:"code")] public string ABC { get; set; } public string msg { get; set; } public string resData { get; set; } }
反序列化数组:
var idArr = JsonConvert.DeserializeObject<string[]>(idStr);
3.忽略某些属性
OptOut:默认值,类中所有公有成员会被序列化,如果不想被序列化,可以用特性JsonIgnore
OptIn:默认情况下,所有的成员不会被序列化,类中的成员只有标有特性JsonProperty的才会被序列化,当类的成员很多,但客户端仅仅需要一部分数据时,很有用
用法:
[JsonObject(MemberSerialization.OptIn)]
[JsonObject(MemberSerialization.OptOut)]
4.自定义序列化的字段名称
[JsonProperty(propertyName: "resourceUuid")] public string sourceIds { get; set; }
5.取出了中被标记为JsonProperty的字段,并获取对应的值:
VehicleModelSearchingModel model = new VehicleModelSearchingModel() { brandId = 0, modelIds="0", yearIds="0", startTime = Convert.ToDateTime("2015/8/25 14:15:08"), endTime = Convert.ToDateTime("2015/9/25 14:15:09"), plateColor = 0, hasPlate = 1, plateNumber = "", vehicleColor = "", sourceIds = "" }; var qry = typeof(VehicleModelSearchingModel).GetProperties().Where(p => p.GetCustomAttributes(typeof(JsonPropertyAttribute), true).Any()); object itemValue = new object(); foreach (var item in qry) { Console.WriteLine("{0}, {1}", ((JsonPropertyAttribute)(item.GetCustomAttributes(typeof(JsonPropertyAttribute), true)[0])).PropertyName, item.GetValue(model, null)); }
6.JContainer扩展类
public static class JContainerExtension { public static List<T> ToList<T>(this JContainer container) { var lst = container.ToList(); List<T> lstRet = new List<T>(); foreach (var item in lst) lstRet.Add(JsonConvert.DeserializeObject<T>(item.ToString())); return lstRet; } }
暂时先了解了这些,因为项目中只用到了这些
参考:http://www.cnblogs.com/yanweidie/p/4605212.html