c# - DataContractJsonSerializer 异常

标签 c# json jquery exception ashx

我在使用我的类(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/

相关文章:

c# - 在没有继承的情况下向元素添加额外属性

c# - ZedGraph 的多 X 轴

c# - 在字符串数组中找到最短的字符串

javascript - 在 Laravel Blade 模板中使用 JS/JQuery 时搜索栏过滤器的问题

javascript - HTML5 音频 IE9 错误 : Unexpected call to method or property access

javascript - 如何将图像文件 url 上传到 indexedDB 以在页面上呈现

c# - Serilog Destructure.ByTransforming<Interface>() 不工作

java - 如何使用java递归获取JSON的键?

javascript - YouTube API search.list-> JSON数据;如何使用 “id/snippet”填充iFrame?

javascript - 通过JS、DataType Json调用Web服务