【发布时间】:2013-07-11 13:43:38
【问题描述】:
我在使用我的课程时遇到此错误。
错误
来自命名空间“”的预期元素“根”..遇到“无”与 名称'',命名空间
我的班级
[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 吗?我认为这可能是由于您的 JSON 名称与您的 C# 类和属性名称不匹配造成的。这将导致序列化程序不知道如何在两者之间进行转换。
-
请查看我的 json 请求
-
谢谢,嗯...那我没主意了。我同意你的观点,离开这些字段不应该导致问题。默认情况下,DataMember 的 IsRequired 属性为 false,所以我认为应该没问题。
标签: c# json jquery exception-handling ashx