如何使用NewtonSoft JsonConvert在其名称中用短划线(“ – ”)反序列化属性?

我们有一个JSON对象,其中一个对象的名称中包含一个破折号。 在下面。

{ "veg": [ { "id": "3", "name": "Vegetables", "count": "25" }, { "id": "4", "name": "Dal", "count": "2" }, { "id": "5", "name": "Rice", "count": "8" }, { "id": "7", "name": "Breads", "count": "6" }, { "id": "9", "name": "Meals", "count": "3" }, { "id": "46", "name": "Extras", "count": "10" } ], "non-veg": [ { "id": "25", "name": "Starters", "count": "9" }, { "id": "30", "name": "Gravies", "count": "13" }, { "id": "50", "name": "Rice", "count": "4" } ] } 

我们如何反序化这个json?

您可以使用DataContractJsonSerializer实现此目的

 [DataContract] public class Item { [DataMember(Name = "id")] public int Id { get; set; } [DataMember(Name = "name")] public string Name { get; set; } [DataMember(Name = "count")] public int Count { get; set; } } [DataContract] public class ItemCollection { [DataMember(Name = "veg")] public IEnumerable Vegetables { get; set; } [DataMember(Name = "non-veg")] public IEnumerable NonVegetables { get; set; } } 

现在你可以用这样的东西反序列化它:

 string data; // fill the json in data variable ItemCollection collection; using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(data))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ItemCollection)); collection = (ItemCollection)serializer.ReadObject(ms); } 

要回答有关如何使用NewtonSoft执行此操作的问题,您将使用JsonProperty属性属性标志。

 [JsonProperty(PropertyName="non-veg")] public string nonVeg { get; set; }