C# 在json中将类的字节数组属性序列化为布尔值
我有以下课程C# 在json中将类的字节数组属性序列化为布尔值,c#,json,serialization,C#,Json,Serialization,我有以下课程 public class MyClass { public int Id { get; set; } public byte[] Logo { get; set; } } 我想将json中的Logo属性序列化为boolean:如果Logo不同于null,则为true,否则为false。如何使用JsonProperty decorator?如果使用以下JsonConverter类,它将按照您的需要序列化。我没有实现ReadJson(反
public class MyClass
{
public int Id { get; set; }
public byte[] Logo { get; set; }
}
我想将json中的Logo属性序列化为boolean:如果Logo不同于null,则为true,否则为false。如何使用JsonProperty decorator?如果使用以下
JsonConverter
类,它将按照您的需要序列化。我没有实现ReadJson
(反序列化),因为数据不再存在。我确信还有其他方法可以实现这一点,但我只是用正确的数据序列化了一个匿名对象。起初,我试图为byte[]
编写一个转换器,但Json.NET显然甚至没有尝试将转换器用于null
值,因此它会给出null
或true
,而不是false
或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
,或者只是有时候想这样序列化,我建议您这样做):
这里有另一种方法。如果您可以添加属性并能够修改
MyClass
,我更希望这样:
public class MyClass
{
public int Id { get; set; }
[JsonProperty("Logo")]
public bool HasLogo { get { return Logo != null; } }
[JsonIgnore]
public byte[] Logo { get; set; }
}
输出类似于:
{"Id":0,"Logo":false} // or
{"Id":1,"Logo":true}
我更喜欢不添加额外属性的解决方案,但是如果你说它不能做其他事情,我会接受你的回答best@fabinho应该可以使用自定义的
JsonConverter
在没有额外属性的情况下执行此操作。我看看是否可以添加一个示例。@fabinho我已经添加了示例。
{"Id":0,"Logo":false} // or
{"Id":1,"Logo":true}