无法让JSON DeserializeObject在这个类上工作

时间:2017-10-26 20:51:42

标签: c# json.net

我正在尝试使用Json.Net反序列化以下类并收到错误:

  

转换值时出错" abc"输入' System.UInt16'。路径' typestr'

public class TestClass 
{
    [JsonIgnore]
    public static ushort TEST_TYPE_A = 0;

    [JsonIgnore]
    public static ushort TEST_TYPE_B = 1;

    [JsonProperty("typestr")]
    public string typestr {get; set;}

    [JsonProperty("testvalue")]
    public string testvalue {get; set;}

    [JsonProperty("bob")]
    public string bob {get; set;}

    public TestClass(ushort typestr)
    {
        this.typestr = types[typestr];
    }

    public void Init() { }
}


TestClass a = JsonConvert.DeserializeObject<TestClass>("{\"typestr\": \"abc\"}");

有谁知道如何解决这个错误?

1 个答案:

答案 0 :(得分:3)

您为JSON提供了typestr的属性,该属性具有字符串值。您的班级中还有两个名为typestr的部分:

  • 属性(类型string
  • 构造函数参数(类型ushort

Json.NET可以使用其中任何一个,但显然构造函数参数优先 - 这是有道理的,因为你还没有提供任何其他构造函数。

你可以:

  • 更改构造函数参数的名称
  • 提供无参数构造函数

其中任何一个似乎都可以解决问题 - 如果您不希望在构造函数调用中使用JSON值,我个人会提供无参数构造函数。