Я получаю эту ошибку при использовании моего класса.Исключение DataContractJsonSerializer
Ошибка
Ожидать элемент 'корень' из пространства имен '' .. не Встречающиеся 'None' с названием '', пространство имен
Мой класс
[DataContract]
public class EntryData
{
[DataMember]
public string EntryId { get; set; }
[DataMember]
public string EmailAddress { get; set; }
[DataMember]
public string StatusCode { get; set; }
[DataMember]
public string TotalVoteCount { get; set; }
public static T Deserialise<T>(string json)
{
var obj = Activator.CreateInstance<T>();
using (var memoryStream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
memoryStream.Position = 0;
var serializer = new DataContractJsonSerializer(obj.GetType());
obj = (T)serializer.ReadObject(memoryStream); // getting exception here
return obj;
}
}
}
ПРИМЕНЕНИЕ
string responseJson = new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd();
var results = EntryData.Deserialise<EntryData>(response)
Я видел онлайн, что это связано с memoryStream position
НО, как вы можете видеть, я устанавливаю его в начало.
Пожалуйста, помогите.
Json собирается обработчик
не установлены StatusCode или TotalVoteCount при прохождении JSON. Я не думаю, что это проблема, хотя.
{
"EntryId":"43",
"EmailAddress":"[email protected]"
}
ОТВЕТ
Вместо того, чтобы использовать метод десериализации в моем классе я использую теперь это.
//commented out this code.
string responseJson = new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd();
var results = EntryData.Deserialise<EntryData>(response)
// this is the way to go using JavaScriptSerializer
var serializer = new JavaScriptSerializer();
var results = serializer.Deserialize<EntryData>(response);
Не могли бы вы разместить свой JSON? Я думаю, что это может быть вызвано вашими именами JSON, которые не соответствуют вашим классам и именам класса C#.Это заставит сериализатор не знать, как перевести между ними. –
см. Мой запрос json в вопросе, пожалуйста, –
Спасибо, хммм ... Тогда у меня нет идей. Я согласен с вами в том, что отказ от этих полей не должен вызывать проблемы. По умолчанию свойство IsRequired DataMember является ложным, поэтому я думаю, что все должно быть хорошо. –