在json.net中使用两个可能的属性名称进行反序列化?

时间:2016-04-08 15:41:27

标签: c# json.net

我有两个"键"对于每个json属性。我总是使用短的属性名称序列化,但是为了反序列化,我需要支持短和长属性名称 所以在下面的示例中,我需要支持" cid"和" customIdentifier"反序列化为SimpleClass时。没有冲突的风险,只需要支持来处理两个属性名称。

public class SimpleClass
{
    [JsonProperty("cid")]
    public int Id { get; set; }
}

[TestFixture]
public class DeserializationDemo
{
    [TestCase("{\"cid\": 1}")]
    [TestCase("{\"customIdentifier\": 1}")]
    public void JsonConvert_Can_Deserialize(string json)
    {
        var expected = new SimpleClass() { Id = 1 };
        var result = JsonConvert.DeserializeObject<SimpleClass>(json);
        Assert.AreEqual(expected.Id, result.Id);
    }

    [TestCase("{\"cid\":1}")]
    public void JsonConvert_Can_Serialize(string expected)
    {
        var test = new SimpleClass() { Id = 1 };
        var result = JsonConvert.SerializeObject(test);
        Assert.AreEqual(expected, result);
    }
}

1 个答案:

答案 0 :(得分:5)

当标记为[JsonProperty]时,Json.NET将反序列化私有和/或仅设置属性。因此你可以这样做:

public class SimpleClass
{
    [JsonProperty("cid")]
    public int Id { get; set; }

    [JsonProperty("customIdentifier")]
    int CustomIdentifier
    {
        set
        {
            Id = value;
        }
    }
}