如何在反序列化json时转换属性类型?

时间:2017-11-21 11:01:20

标签: c# json

我需要接受一个json字符串,其中包含类型为uint32 [](长度为2)的字段为long。

要序列化的类:

public class ChainHeightDTO
{
    [JsonProperty("height")]
    public uint[] Height { get; set; }
}

我需要什么:

public class ChainHeightDTO
{
    [JsonProperty("height")]
    [JsonConverter(typeof(TypeConversionClass))]
    public long Height { get; set; }
}

我已经看到了这个答案:https://stackoverflow.com/a/4093750/8099383看起来像我需要但我需要包含一个自定义函数来从uint32 []转换为long(我认为?),它似乎与接口有关而不是原生类型。

如果它有所不同,则长度由uint32 [0] = lower& uint32 [1] =更高。

1 个答案:

答案 0 :(得分:1)

您可以告诉json将height反序列化为原始类型(uint[]),但向用户公开另一个long类型的属性。像(未经测试,但应该提出一个想法):

public class ChainHeightDTO
{
    [JsonProperty("height")]
    private uint[] _height 
    {
        get { return new uint[] { Height % 256, Height / 256 }; }
        set { Height = value[0] + value[1] * 256; }
    }
    [JsonIgnore]
    public long Height { get; set; }
}

注意:_heightprivateHeight被json标记为忽略。