我在使用我的类(class)时遇到此错误。
错误
Expecting element 'root' from namespace ''.. Encountered 'None' with name '', namespace
我的类(class)
[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 去处理程序
我在传入 JSON 时没有设置 StatusCode 或 TotalVoteCount。不过我不认为这是问题所在。
{
"EntryId":"43",
"EmailAddress":"test@email.com"
}
回答
我现在使用的不是在我的类中使用 Deserialize 方法。
//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 名称与 C# 中的属性名称不匹配导致的?
我的理解是
{
"FirstName" : "Mark"
}
将能够反序列化为:
[DataContract]
public class Person
{
[DataMember]
public string FirstName {get; set;}
}
但这不能序列化
{
"Name" : "Mark"
}
除非您将 C# 类更改为具有明确的 DataMember 名称
[DataContract]
public class Person
{
[DataMember(Name="Name")]
public string FirstName {get; set;}
}
虽然我不确定这会导致哪个错误。我没有足够的第一手经验。
关于c# - DataContractJsonSerializer 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17595045/