[英]Serialize byte array property of class as boolean in json
我有以下課程
public class MyClass
{
public int Id { get; set; }
public byte[] Logo { get; set; }
}
我想將JSON中的Logo屬性序列化為布爾值:如果Logo與null不同,則為true,否則為false。 如何使用JsonProperty裝飾器?
如果使用以下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
,或者有時僅想像這樣序列化,建議您這樣做):
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; }
}
輸出類似:
{"Id":0,"Logo":false} // or
{"Id":1,"Logo":true}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.