2012-08-31 32 views
10

Tôi có một yêu cầu JSON đã follwing cấu trúc:Làm thế nào để Deserialize một đối tượng JSON với tên trường không hợp lệ trong nó

"formats": { 
     "flash_embed": "http://a3.vikiassets.com/assets/vikiplayer-922746a667cfd38137a7e45df6ba1b95.swf?auto_play=true&language_codes=en&media_id=74965&partner=16&source=api_v3", 
     "m3u8": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965/ios.m3u8", 
     "res-150p": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_mp4cell_150.mp4", 
     "res-240p": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_240p.mp4", 
     "res-270p": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_270p.mp4", 
     "res-360p": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_360p.mp4", 
     "res-480p": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_480p.mp4", 
     "res-720p": "http://wpc.354a.edgecastcdn.net/00354A/videos/encoded/74965_720p.mp4" 
     } 
    } 

Bây giờ res-150p, nói tên không hợp lệ trong C# và nếu tôi đưa ra một cái tên khác để nó sau đó trong khi desiralizing tôi không nhận được bất kỳ giá trị, đó là null bên trong res-150p.

Edit: [Serializable] MoviesListRootObject là đối tượng gốc mà Có Response và sau đó ResponseFormats

public class MoviesListRootObject 
{ 
    public int count { get; set; } 
    public Pagination pagination { get; set; } 
    public List<Response> response { get; set; } 
} 

[Serializable] 
public class Response 
{ 
    public int id { get; set; } 
    public int channel_id { get; set; } 
    public string title { get; set; } 
    public string title_language { get; set; } 
    public string description { get; set; } 
    public string description_language { get; set; } 
    public string created_at { get; set; } 
    public string uri { get; set; } 
    public string web_uri { get; set; } 
    public List<object> genres { get; set; } 
    public string origin_country { get; set; } 
    public string image { get; set; } 
    public Subtitles subtitles { get; set; } 
    public Formats formats { get; set; } 
} 

[Serializable] 
public class Formats 
{ 
    public string flash_embed { get; set; } 
    public string m3u8 { get; set; } 
    public string __invalid_name__res150p { get; set; } 
    public string __invalid_name__res240p { get; set; } 
    public string __invalid_name__res270p { get; set; } 
    public string __invalid_name__res360p { get; set; } 
    public string __invalid_name__res480p { get; set; } 
    public string __invalid_name__res720p { get; set; } 
    public string __invalid_name__flv480p { get; set; } 
    public string __invalid_name__flv360p { get; set; } 
    public string __invalid_name__flv270p { get; set; } 
    public string __invalid_name__flvvp6360p { get; set; } 
    public string __invalid_name__flvvp6270p { get; set; } 
} 
+2

Bạn deserializing nó như thế nào? –

+0

Desriliaing với Type, var rootObj = JsonConvert.DeserializeObject (json); – Simsons

+0

Và 'MoviesListRootObject' là gì? –

Trả lời

7

Bạn có để trang trí Formats tính của bạn với các thuộc tính JsonProperty nói với nó những gì diễn ra ở đâu nếu tên không khớp chính xác:

partial class Formats 
{ 
    [JsonProperty("res-150p")] 
    public string __invalid_name__res150p {get; set;} 
} 

Xem thêm Using JsonConvert.DeserializeObject to deserialize Json to a C# POCO class

+1

Cảm ơn, Chỉ cần tò mò toknow, Tôi cũng có thể khai báo các tỷ lệ bình thường và có các tên khác nhau bằng cách sử dụng các thuộc tính không? – Simsons

+0

@Simsons Chắc chắn rồi. Đó là những gì đang xảy ra ở đây, đúng không? Nó chỉ xảy ra như vậy bạn không thể sử dụng cùng tên với JSON để bạn * có * sử dụng một cái gì đó mới ('__invalid_name__res150p'). –

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