2014-08-27 2 views
0

У меня есть класс POCO в C#, который представляет собой JSON объект:Представляют JSON в сильно типизированных POCO класса

класса

public int id {get; set;} 
public string name {get; set;} 
public string description {get; set;} 

JSON

{ 
    "id" : 1, 
    "name" : "name", 
    "description" : "description" 
} 

Сейчас в JSON будут добавлены эти свойства:

{ 
    "property_1" : "value_1", 
    "property_2" : "value_2", 
    "property_3" : "value_3" 
//etc 
} 

Может быть всего 0 свойств и столько, сколько необходимо, но все они будут называться property_ и числом. Итак, для класса я хочу иметь List<> какого-то типа вместо жесткого кодирования каждого свойства по отдельности, но затем возвратил объект Json (я использую MVC). Я хочу разбить этот List<> на отдельные объекты, как я могу это сделать что?

Вместо того, чтобы:

return Json(property_1, property_2, property_3); 

Я хочу:

return Json(properties.Split()); 
+0

Любопытно, почему бы вам не использовать коллекции/пары имени-значения для них, как в качестве объектов на стороне сервера, так и в виде JSON? –

+0

@ Moby'sStuntDouble Объект json потребляется веб-сервисом, и именно так он имеет настройки свойств, я не могу его контролировать. – SOfanatic

+2

, пожалуйста, удалите человека, который сделал веб-сервис от меня, от вашего имени :) –

ответ

3

Если вы используете Json.NET для JSON сериализации, вы можете использовать атрибут [JsonExtensionData] захватить свойства, которые вы не имеете закодированный для. Начиная с Json.NET 5.0.8, это свойство влияет как на сериализацию, так и на десериализацию, чтобы гарантировать, что ваши объекты POCO поддерживают круговое отключение.

На практике, я поместил этот атрибут на поле в абстрактном базовом классе, который все мои модели классов получены из:

ExtensibleJsonObject

+0

Это очень интересно! Он должен открыть некоторые интересные возможности. Спасибо! ;) – Mithon

1

Вы можете написать свой собственный MediaTypeFormatter и вставить его в свой HttpConfiguration.Formatters перед стандартным JsonFormatter или расширьте стандартную и полностью замените его. (Я бы предложил первый.)

MediaTypeFormatters предоставляют вам доступ к необработанному потоку по мере его поступления, и вы можете в принципе делать все, что хотите, с сериализацией и десериализацией в этой точке, используя все JSON.NET.