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

Ger*_*nen 4 c# json json.net deserialization

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

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; }
}
Run Code Online (Sandbox Code Playgroud)

单元测试:

[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);
}
Run Code Online (Sandbox Code Playgroud)

这将失败,因为评估.Average为空并且评估.EvaluationType为0。其他字段已正确解析。

为什么会失败?

Yuv*_*kov 5

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; }
}
Run Code Online (Sandbox Code Playgroud)

  • 我也是这么想的,但是文档建议您*应该*能够使用DataMember:http://www.newtonsoft.com/json/help/html/SerializationAttributes.htm (3认同)