Создать легкий JSON с помощью DataContractJsonSerializer - PullRequest
2 голосов
/ 16 апреля 2010

Я пытаюсь сгенерировать JSON с использованием C # и DataContractJsonSerializer в .Net 3.5.Проблема в том, что я не могу понять, как правильно построить структуру для нужного мне результата.

Я пытался воспроизвести ассоциативные массивы PHP с использованием как хеш-таблиц, объектов списков и массивов, но не могу понятьо том, как сгенерировать мой результат наилучшим образом, используя DataContractJsonSerializer без необходимости создания собственного рекурсивного цикла для построения JSON.

Самый близкий подход - использование словаря >результат слишком велик, так как я не могу «назвать» ключи.

Вот что я получаю:

[
   {
      "Key":"status",
      "Value":[
         {
            "Key":"value",
            "Value":"ok"
         }
      ]
   },
   {
      "Key":"1",
      "Value":[
         {
            "Key":"name",
            "Value":"Result1"
         },
         {
            "Key":"details",
            "Value":"Result 1 details"
         }
      ]
   },
   {
      "Key":"2",
      "Value":[
         {
            "Key":"name",
            "Value":"Result2"
         },
         {
            "Key":"details",
            "Value":"Result 2 details"
         }
      ]
   },
   {
      "Key":"caller",
      "Value":[
         {
            "Key":"value",
            "Value":"1135345"
         }
      ]
   }
]

Вот что я хочу:

{
   "status":"ok",
   "response":[
      {
         "id":1,
         "name":"Result1"
         "details":"Result 1 details"
      },
      {
         "id":2,
         "name":"Result2"
         "details":"Result 2 details"
      },
      {
         "id":3,
         "name":"Result3"
         "details":"Result 3 details"
    ],
   "caller":"1135345"
}

Кто-нибудь знает, как я могу сгенерировать этот фрагмент JSON, используя C #, без необходимости загружать всю инфраструктуру Json.NET?Мне нужно, чтобы это было создано как можно быстрее, так как этот проект стремится стать поисковой системой сайта.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2010

Вы должны посмотреть на использование JavaScriptSerializer . Это часть .NET Framework (распространяется в System.Web.Extensions). Чтобы получить желаемый результат, вы можете сделать это:

var results = new[]
{
    new{id=1,name="Result 1"},
    new{id=2,name="Result 2"},
    new{id=3,name="Result 3"}
};

var js = new JavaScriptSerializer();
var result = js.Serialize(new
{
    status = "ok",
    response = results,
    caller = 1135345
});

Вы можете использовать анонимные классы или любые существующие. Отлично работает :) Возвращаемое значение этого вызова будет:

* +1007 *
2 голосов
/ 19 апреля 2010

Использование JavaScriptSerializer вместо DataContractJsonSerializer в словаре удалит атрибуты json Key / Value и превратит их в массив с ключами.

http://msdn.microsoft.com/en-us/library/bb412168.aspx

Приписали ли вы ваши классы декораторам [DataContract] и [DataMember]?

http://msdn.microsoft.com/en-us/library/bb412179.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...