2013-08-07 1 views
1

Я следующий JSon stirngПреобразование JSON строка в CLR Типы

{ 
"api_version" : 2 , 
"lang" : "en_US", 
"hotels" : 
[ 
{ 
"hotel_id" : 258705 , 
"desc" : "The Hotel Commonwealth stands above the Kenmore Square \"T\" subway station in Boston, Mass. Fenway Park is located two blocks away, while the shops along Newbury Street are three blocks from the hotel.", 
"amenities" : ["RESTAURANT","NON_SMOKING"], 
"room_types" : 
{ 
"Fenway Room" : 
{ 
"url" : "http://www.partnersite.com/hotel_commonwealth/fenway_room", 
"desc" : "One king bed with pillowtop mattress, Frette Italian linens, down bedding, multiple pillows. View of Fenway Park." 
}, 
"Commonwealth Room" : 
{ 
"url" : "http://www.partnersite.com/hotel_commonwealth/commonwealth_room", 
"desc" : "One king bed with pillowtop mattress, Frette Italian linens, down bedding, multiple pillows. View of Commonwealth Avenue." 
} 
} 
} 
] 
} 

и я создал следующий POCO classes.I может десериализацию выше строки, используя NewtonSoft.

internal class FenwayRoom 
    {  

    } 

    internal class CommonwealthRoom 
    { 

    } 

    internal class RoomTypes 
    { 

     [JsonProperty("Fenway Room")] 
     public FenwayRoom FenwayRoom { get; set; } 

     [JsonProperty("Commonwealth Room")] 
     public CommonwealthRoom CommonwealthRoom { get; set; } 
    } 

    internal class Hotel 
    { 


    } 

} 

Теперь проблема заключается в том, что для каждого roomtype я должен создать перегородки class.Is там какой-нибудь лучший подход для этого?

+0

я описываю, как сделать это в этом ответе: http://stackoverflow.com/a/14673555/14357 – spender

+0

Вы не должны Pocos для каждого экземпляра типа ... но это JSON формат, который вы выше, не дает особого преимущества для непосредственного отображения в POCOs. Кроме того, рассмотрите использование JSON-анализатора, например 'ServiceStack.Text', а затем вам не нужно украшать свойства и т. Д. Атрибутами. Можете ли вы изменить формат JSON? –

+0

@ Moo-Juice: Мы не можем изменить формат json. –

ответ

0

Вы можете использовать автоматизированные инструменты, как это:

JSON TO CSHARP

JSONPACK

+0

Инструменты генерируют тот же класс, что и на вопрос –

1

свойства в комнату, кажется, то же самое, нужно просто ввести единый Room класс, например,

public class Room 
{ 
    [JsonProperty("url")] 
    public string Url { get; set; } 
    [JsonProperty("desc")] 
    public string Description { get; set; } 
} 

public class RoomTypes 
{ 
    [JsonProperty("Fenway Room")] 
    public Room FenwayRoom { get; set; } 
    [JsonProperty("Commonwealth Room")] 
    public Room CommonWealthRoom { get; set; } 
} 
+0

. Я уже использую это. Если я добавлю новый тип комнаты, тогда мне нужно добавить еще одну прозертило в номерах –

+0

@muski, к сожалению, ваш JSON данные диктуют, что для того, чтобы иметь конкретный тип класса с автоматическим отображением, модель должна быть * точно * то же, что и данные. Свойство 'room_types' - это сложный объект с свойствами комнаты, это не список, поэтому имеет смысл, что вам необходимо соответствующим образом обновить модель. Внедряя один класс «Room», вам, по крайней мере, не нужно вводить отдельный класс * для каждой комнаты *, вам просто нужно добавить свойство для сериализации. В качестве альтернативы вы можете спуститься по маршруту ручного сопоставления (см. Связанный с @spender ответ). – James

+1

+1 ... Также может быть приятнее для Alias ​​прочь 'url' для' Url', et al. –

Смежные вопросы