C# Json序列化和反序列化 bool字段

问题描述:

Json序列化时会将Bool类型转换成string类型,然后反序列化时拿到的类型便于我的字段类型不匹配。

解决方法:

/// <summary>
/// 自定义布尔类型数据转换规则
/// </summary>
public class MyBoolConverter : JsonConverter
{
    private const string TrueStr = "TRUE";
    private const string FalseStr = "FALSE";
    public override bool CanConvert(Type objectType) => true;

    //反序列化
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.ValueType == typeof(string))
        {
            if ((string)reader.Value == TrueStr)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        return false;
    }

    //序列化
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        if (value.GetType() == typeof(bool))
        {
            bool result = (bool)value;
            if (result)
            {
                writer.WriteValue(TrueStr);
            }
            else
            {
                writer.WriteValue(FalseStr);
            }
        }
    }
}

如何使用

//在需要操作的类型定义中的字段/属性中加入该特性:
private class MyClass
{
    [JsonConverter(typeof(MyBoolConverter))]
    public bool MyBool;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用 C# 对象进行 JSON 序列化反序列化的示例代码: ```csharp using System; using System.Collections.Generic; using System.Text.Json; namespace JsonDemo { class Program { static void Main(string[] args) { // 对象序列化JSON 字符串 var person = new Person { Name = "John", Age = 30, IsStudent = true, Hobbies = new List<string> { "reading", "traveling", "playing games" }, Address = new Address { Street = "123 Main St", City = "New York", State = "NY", Zip = "10001" } }; var json = JsonSerializer.Serialize(person); Console.WriteLine(json); // JSON 字符串反序列化为对象 var jsonStr = "{\"name\":\"John\",\"age\":30,\"isStudent\":true,\"hobbies\":[\"reading\",\"traveling\",\"playing games\"],\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\",\"state\":\"NY\",\"zip\":\"10001\"}}"; var person2 = JsonSerializer.Deserialize<Person>(jsonStr); Console.WriteLine(person2.Name); Console.WriteLine(person2.Age); Console.WriteLine(person2.IsStudent); Console.WriteLine(string.Join(", ", person2.Hobbies)); Console.WriteLine(person2.Address.Street); Console.WriteLine(person2.Address.City); Console.WriteLine(person2.Address.State); Console.WriteLine(person2.Address.Zip); } } public class Person { public string Name { get; set; } public int Age { get; set; } public bool IsStudent { get; set; } public List<string> Hobbies { get; set; } public Address Address { get; set; } } public class Address { public string Street { get; set; } public string City { get; set; } public string State { get; set; } public string Zip { get; set; } } } ``` 以上代码中,我们定义了一个 `Person` 类和一个 `Address` 类,分别表示人和地址信息。使用 `System.Text.Json` 命名空间中的 `JsonSerializer` 类进行序列化反序列化操作。在 `Main` 方法中,我们先创建一个 `Person` 对象,然后将其序列化JSON 字符串并输出。接着,我们将 JSON 字符串反序列化为 `Person` 对象,并输出其属性值。 输出结果如下: ``` {"Name":"John","Age":30,"IsStudent":true,"Hobbies":["reading","traveling","playing games"],"Address":{"Street":"123 Main St","City":"New York","State":"NY","Zip":"10001"}} John 30 True reading, traveling, playing games 123 Main St New York NY 10001 ``` 这个示例中,我们定义了一个 `Person` 对象,包含了名字、年龄、是否为学生、爱好和地址等信息。其中,爱好是一个字符串列表,地址是一个嵌套的对象。序列化后,得到的 JSON 字符串与前面所示的示例相同。反序列化后,我们可以得到与原对象相同的属性值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值