2013-02-07 23 views
14

Chúng tôi có một đối tượng JSON với một đối tượng có dấu gạch ngang trong tên của nó. Ví dụ bên dưới.Làm thế nào để deserialize một tài sản với một dấu gạch ngang ("-") trong tên của nó với NewtonSoft JsonConvert?

{ 
    "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" 
     } 
    ] 
} 

Làm thế nào chúng ta có thể deserialize json này?

+0

Không trùng lặp. Câu hỏi này tìm cách giải quyết một vấn đề cụ thể và khác biệt. Một cái mà tôi đã có, vì vậy, tôi đã đầu tư vào điều này. – MrBoJangles

Trả lời

16

Bạn có thể đạt được điều này bằng cách sử dụng 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<Item> Vegetables { get; set; } 
    [DataMember(Name = "non-veg")] 
    public IEnumerable<Item> NonVegetables { get; set; } 
} 

bây giờ bạn có thể deserialize nó với một cái gì đó như thế này:

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); 
} 
+0

cảm ơn ... hãy để tôi thử điều này – robert

+0

Tôi có thể xác định 'DataMember' chỉ cho thuộc tính có dấu gạch ngang và để phần còn lại không? –

+0

Bạn cần thêm DataMember vào mọi thuộc tính bạn muốn được đăng, tuy nhiên bạn không thể chỉ định tên nếu tên của thuộc tính đủ tốt. –

37

Để trả lời các câu hỏi về làm thế nào để làm điều này với NewtonSoft, bạn sẽ sử dụng cờ thuộc tính thuộc tính JsonProperty.

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

Để sử dụng VB:

Các vấn đề liên quan