Newtonsoft.Json初探


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM