在json中将类的字节数组属性序列化为boolean

时间:2014-04-08 11:42:24

标签: c# json serialization

我有以下课程

public class MyClass
{
     public int Id { get; set; }           
     public byte[] Logo { get; set; }   
}

我想将json中的Logo属性序列化为boolean:如果Logo不是null,则为true,否则为false。我怎样才能使用JsonProperty装饰器?

1 个答案:

答案 0 :(得分:1)

如果您使用以下JsonConverter课程,它将按您的方式序列化。我还没有实现ReadJson(反序列化),因为数据不再存在。还有其他方法可以实现这一点,我确定,但我只是使用正确的数据序列化了一个匿名对象。起初,我试图为byte[]编写一个转换器,但是Json.NET显然甚至没有尝试将转换器用于null值,因此它会给{{1} }或null,而不是truefalse

true

将其指定为类的转换器:

public class MyClassConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return typeof(MyClass) == objectType;
    }
    public override object ReadJson(JsonReader reader, Type objectType,
                 object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
    public override void WriteJson(JsonWriter writer, object value,
                                     JsonSerializer serializer)
    {
        var myClass = (MyClass)value;
        serializer.Serialize(writer, new { Id = myClass.Id,
                                           Logo = myClass.Logo != null });
    }
}

或者在您进行序列化时指定它(如果您无法修改[JsonConverter(typeof(MyClassConverter))] public class MyClass { public int Id { get; set; } public byte[] Logo { get; set; } } ,我建议您这样做,或者有时只想将其序列化):

MyClass

这是另一种方法。如果你能添加一个属性并且能够修改var s1 = JsonConvert.SerializeObject(new MyClass(), new MyClassConverter()); var s2 = JsonConvert.SerializeObject(new MyClass { Id = 1, Logo = new byte[] { 1, 2, 3, } }, new MyClassConverter()); ,我更喜欢这个:

MyClass

输出类似:

public class MyClass
{
     public int Id { get; set; }
     [JsonProperty("Logo")]
     public bool HasLogo { get { return Logo != null; } }
     [JsonIgnore]
     public byte[] Logo { get; set; }
}