Как мне прочитать «вложенный» файл Json с помощью DataContractJsonSerializer в C # .NET (телефон win7)? - PullRequest
3 голосов
/ 18 декабря 2010

У меня проблема, когда мой файл json выглядит так

{"Числа": "45387", "Слова": "пробелы"}

Я могу прочитать это очень хорошо, однако, если это выглядит так:

{"Main": {"Numbers": "45387", "Words": "пробелы"},
"Something": {"Numbers": "12345", "Words": "Kransky"}}

Я не получаю никакой информации. Я понятия не имею, как переключаться между Main и Something! Загрузка JSON с этой «вложенной» информацией, используя этот код,

var ser = new DataContractJsonSerializer(typeof(myInfo));

var info = (myInfo)ser.ReadObject(e.Result); 

// Класс, используемый для хранения моей информации

[DataContract] 
public class myInfo 
{ 
    [DataMember(Name="Numbers")] 
    public int number 
    { get; set; } 

    [DataMember(Name="Words")] 
    public string words 
    { get; set; } 
} 

Заставляет класс возвращаться пустым.
Я попытался добавить имя группы в DataContract, например. [DataContract, Name = "Main"], но это по-прежнему приводит к тому, что значения классов становятся пустыми.
Я также попытался добавить "основной" к загрузчику сериализатора, например. var ser = new DataContractJsonSerializer (typeof (myInfo), "Main");
Это вызывает ошибку: ожидание элемента 'Main' из пространства имен '' .. Обнаружен элемент 'с именем' root ', пространство имен' '.
Я бы предпочел просто использовать прилагаемый JSON Reader. Я изучил json.NET, но обнаружил, что документация требует написания json и мало информации о чтении. Конечно, я упускаю что-то простое здесь!

1 Ответ

5 голосов
/ 18 декабря 2010

Вы можете добавить класс-оболочку:

[DataContract]
public class Wrapper
{
    [DataMember]
    public myInfo Main { get; set; }

    [DataMember]
    public myInfo Something { get; set; }
}

Теперь вы можете десериализовать JSON обратно в этот класс-обертку и использовать два свойства для доступа к значениям.

...