c# - 使用 Json.Net 反序列化在某些字段上失败

标签 c# json json.net deserialization

我尝试使用 Json.Net 将 Json 反序列化为 c# 对象。

C#类:

public class Evaluation
{
    [DataMember(Name = "id")]
    public int Id { get; set; }

    [DataMember(Name = "avg")]
    public string Average { get; set; }

    [DataMember(Name = "median")]
    public string Median { get; set; }

    [DataMember(Name = "teacherID")]
    public int TeacherId { get; set; }

    [DataMember(Name = "evalType")]
    public int EvaluationType { get; set; }
}

单元测试:

[Test]
[TestCase()]
public void TestParsing()
{
    string json = "{" +
                "\"id\": 439476," +
                "\"avg\": \"69\"," +
                "\"median\": \"75\"," +
                "\"teacherID\": 1," +
                "\"evalType\": 1" +
                "}";

    Evaluation evaluation = JsonConvert.DeserializeObject<Evaluation>(json);

    Assert.IsTrue(evaluation.Average.Equals("69"));
    Assert.IsTrue(evaluation.EvaluationType == 1);
}

这失败了,因为 evaluation.Average 为空且 evaluation.EvaluationType 为 0。其他字段已正确解析。

为什么会失败?

最佳答案

设置DataContract类声明上的属性应该可以解决问题:

[DataContract]
public class Evaluation
{
    [DataMember(Name = "id")]
    public int Id { get; set; }

    [DataMember(Name = "avg")]
    public string Average { get; set; }

    [DataMember(Name = "median")]
    public string Median { get; set; }

    [DataMember(Name = "teacherID")]
    public int TeacherId { get; set; }

    [DataMember(Name = "evalType")]
    public int EvaluationType { get; set; }
}

关于c# - 使用 Json.Net 反序列化在某些字段上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30214337/

相关文章:

json - Grails 2.2 对需要请求 JSON 内容的远程 Web 服务的功能测试

html - 适用于结构化数据的文本友好文件格式

c# - 如何在c#字段中转换json数组字段

c# - 在 Visual Studio 2010 中将 Excel 数据导入 DataGridView

c# - 模态弹出扩展问题

c# - Entity Framework 异步问题上下文还是查询?

jquery - ASP.NET MVC - 从 IIS 接收 Json 响应时出现问题

c# - 从代码 ⇒ IL 或 IL ⇒ native 代码创建的引用在哪里

c# - JSON.NET 可以使用 "sidecar"方法序列化对象吗?

.net - 从“System.Data.Entity.Spatial.DbGeography”上的 'WellKnownValue' 获取值时出错