У меня есть универсальное приложение, в котором я общаюсь с REST API. Любой ответ от REST я десериализую с помощью DataContractJsonSerializer.
У меня проблема с ответом, который содержит словарь. Этот словарь мне не нужно десериализовать - мой класс не содержит этого словаря. В Win RT работает, а в Win Phone не работает. Я получаю эту ошибку:
The dictionary cannot be deserialized because the member 'key of dictionary' was found more than once in the input.
Я не понимаю, почему это работает в Win RT, а не в Win Phone.
//редактировать - добавить образец JSON
{
"ResultType": 0,
"Message": "",
"Exception": null,
"Result": {
"property": 1,
"property2": 2,
"property3": "2015-01-31T13:56:43.5337609+01:00",
"GeneratedQuestions": {
"className": [
{
"innerProperty": 1,
"innerProperty2": 2,
"innerProperty3": "sample",
"innerProperty4": [
{
"prop1": 1,
"prop2": 2,
"prop3": 3,
"prop4": "sample text",
}
]
},
{
"innerProperty": 1,
"innerProperty2": 2,
"innerProperty3": "sample2",
"innerProperty4": []
},
{
"innerProperty": 1,
"innerProperty2": 2,
"innerProperty3": "sample3",
"innerProperty4": []
}
]
}
}
}
код для десериализации json
protected T DeserializeJson<T>(string json)
where T : class
{
T type;
DataContractJsonSerializer jsonSerialized = new DataContractJsonSerializer(typeof(T), new DataContractJsonSerializerSettings { DateTimeFormat = new System.Runtime.Serialization.DateTimeFormat("dd.mm.yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture) });
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
try
{
ms.Position = 0;
type = jsonSerialized.ReadObject(ms) as T;
}
catch
{
type = default(T);
}
}
return type;
}
Упрощенная версия модели:
[DataContract]
public class SampleClass
{
[DataMember(Name = "ResultType")
public string ResultType { get; set; }
[DataMember(Name = "Message")
public string Message{ get; set; }
[DataMember(Name = "Exception")
public Exception Exception{ get; set; }
[DataMember(Name = "Result")
public ResultModel Result{ get; set; }
}
public class ResultModel
{
[DataMember(Name = "property")
public int Property { get; set; }
[DataMember(Name = "property2")
public int Property2 { get; set; }
[DataMember(Name = "property3")
public string Property3 { get; set; }
}
T
)? - person khlr   schedule 31.01.2015[DataContract]
кResultModel
и удаленияGeneratedQuestions
изResultModel
? 2)GeneratedQuestions
не словарь, это класс, содержащий одно свойство:public List<ClassName> className { get; set; }
. Разместите свой JSON на json2csharp.com, чтобы понять, что я имею в виду. - person dbc   schedule 31.01.2015