Десериализация массива словаря - PullRequest
1 голос
/ 04 апреля 2011

Я получаю объект JSON со строкой вроде:

"rec":[
    {"f":["T","R"],"u":316,"fName":"test","lName":"test2"},
    {"f":["C","R"],"u":990,"fName":"beth","lName":"tin"}
],

Я пытаюсь десериализовать его, используя DataContractSerializer и заключив контракт DataMember на член типа public Dictionary<string,object> [] rec; Но я получаю сообщение об ошибке:

Объект типа 'System.Object' не может быть преобразованным в тип 'System.Collections.Generic.Dictionary`2 [System.String, System.Object]'.

Может кто-нибудь объяснить мне, как мне следует десериализовать эту строку?

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

почему бы не использовать json.net ?

десериализацию из их документа:

string json = @"{""key1"":""value1"",""key2"":""value2""}";

Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);

Console.WriteLine(values.Count);
// 2

Console.WriteLine(values["key1"]);
// value1

, которая может быть улучшена в классах с определенными [Json...] -атрибутами... Если вы работаете с DataMember -атрибутами, вы можете сразу перейти к json.net, так как они поддерживают использование DataMember и тому подобное ...

сериализация тоже должна работать - простопробные списки и тому подобное, которые для меня более чем работали!

0 голосов
/ 04 апреля 2011

Я думаю, вы должны использовать JavaScriptSerializer:

var serializer = new JavaScriptSerializer();
var result = serializer.Deserialize<Dictionary<string, object>>("{" + data + "}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...