gpt4 book ai didi

c# - 如何将解码后的 json 文件中的 bool 值转换为小写字符串?

转载 作者:太空狗 更新时间:2023-10-29 23:39:20 25 4
gpt4 key购买 nike

我正在解码的类使用字符串字段,Newtonsoft 默认解码器将 json 文件中的 bool 值转换为大写字符串。它可能会调用 bool 类型的 ToString(),结果为“True”或“False”。

void Main()
{
var foo = JsonConvert.DeserializeObject<Foo>("{Prop:true}");
Console.WriteLine(foo.Prop); // output: True, desired output: true
}

public class Foo
{
public string Prop{get;set;}
}

由于字段在 json 中可以是字符串或 bool 值,我喜欢有一个自定义解码器,它始终根据值将 json-booleans 转换为“true”或“false”。

如有任何帮助,我们将不胜感激。

最佳答案

这样的事情怎么样:

class BoolStringConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (typeof(string) == objectType);
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
string str = token.Value<string>();
if (string.Equals("true", str, StringComparison.OrdinalIgnoreCase) ||
string.Equals("false", str, StringComparison.OrdinalIgnoreCase))
{
str = str.ToLower();
}
return str;
}

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}

演示:

class Program
{
static void Main(string[] args)
{
string json = @"
{
""Bool1"": true,
""Bool2"": ""TRUE"",
""Bool3"": false,
""Bool4"": ""FALSE"",
""Other"": ""Say It Isn't True!""
}";

Foo foo = JsonConvert.DeserializeObject<Foo>(json, new BoolStringConverter());

Console.WriteLine("Bool1: " + foo.Bool1);
Console.WriteLine("Bool2: " + foo.Bool2);
Console.WriteLine("Bool3: " + foo.Bool3);
Console.WriteLine("Bool4: " + foo.Bool4);
Console.WriteLine("Other: " + foo.Other);
}
}

class Foo
{
public string Bool1 { get; set; }
public string Bool2 { get; set; }
public string Bool3 { get; set; }
public string Bool4 { get; set; }
public string Other { get; set; }
}

输出:

Bool1: true
Bool2: true
Bool3: false
Bool4: false
Other: Say It Isn't True!

关于c# - 如何将解码后的 json 文件中的 bool 值转换为小写字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19438152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com