Это возможно в JSON? - PullRequest
       14

Это возможно в JSON?

6 голосов
/ 09 февраля 2012

Я сейчас работаю с json.net! Я знаю, как десериализовать данные JSON и как сопоставить с нашим классом. Теперь я готов ответить на некоторые вопросы!

Предположим, мои jsonstrings

"attributes":{
            "color":"Brown",
            "condition":"Used",
            "currency":"USD",
            "price":"10500",
            "price_display":"$10,500",
         }

и мой класс атрибута (, в котором я хочу десериализовать выше строки ) равен

Public class Attribute
{
        public string name{ get; set; }
        public string value{ get; set; }
}

Теперь я использую следующий код для десериализации.!

 JavaScriptSerializer ser = new JavaScriptSerializer();
 <classname> p = ser.Deserialize<classname>(jsonString);

И, очевидно, этот код вообще не будет работать для вышеупомянутой jsonstring.

Теперь, как я могу связать эти пары имя-значение в одном классе? Это возможно?

В будущем атрибуты могут быть больше 10, но формат будет таким же, как у пары имя-значение

1 Ответ

1 голос
/ 09 февраля 2012

РЕДАКТИРОВАТЬ: Извините, но каким-то образом я интерпретировал ваш вопрос, как если бы вы хотели сериализовать , а не десериализовать (но я все равно оставлю оригинал ниже, так какЯ думаю, что это хорошее знание :)).

Попробуйте десериализовать вашу строку JSON в Dictionary<string,string> вместо вашей Attribute.У меня есть предчувствие, что это может сработать.Затем вы можете настроить оставшуюся часть кода на использование этого словаря или преобразовать его в коллекцию ваших Attribute экземпляров.


Исходный ответ (относится к сериализации ,что было противоположно тому, что вы просили) ниже.

Я так не думаю, но если намерение заключается в том, чтобы использовать его на клиенте таким образом:

attributes["color"] // returns Brown
attributes["price"] // returns 10500

..тогда то, что вам нужно, называется «ассоциативный массив», поскольку это эквивалентно следующему:

attributes.color
attributes.price

... так как на самом деле это не массив, а объект (javascript предоставляет эти два способасвойства ссылочного объекта, например, window.onload - это то же самое, что и window["onload"]) ...

... и вы можете добиться этого с помощью JavaScriptSerializer, если сериализовать Dictionary<string,string> в строку JSON (другими словами,измените свой Attribute класс на KeyValuePair<string,string> или иным образом создайте такой словарь по-другому.

...