我有两个"键"对于每个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);
}
}
答案 0 :(得分:5)
当标记为[JsonProperty]
时,Json.NET将反序列化私有和/或仅设置属性。因此你可以这样做:
public class SimpleClass
{
[JsonProperty("cid")]
public int Id { get; set; }
[JsonProperty("customIdentifier")]
int CustomIdentifier
{
set
{
Id = value;
}
}
}