如何将 json 值转换为小写 - 反序列化

用户 456

请需要一些帮助。

我正在尝试将所有 json 值(不是键)转换为小写。我浏览并发现仅如何转换属性名称(键),而不是属性值。

我花了一整天的时间试图弄清楚该怎么做。

有类似的东西

"name": "luke skywalker", 
"hair_color": "blond", 
"skin_color": "fair",

以下是我目前正在尝试的代码。它不起作用。

private static void ChangePropertiesToLowerCase(JObject jsonObject)
        {
            foreach (var property in jsonObject.Properties().ToList())
            {
                if (property.Value.Type == JTokenType.Object)// replace property names in child object
                    ChangePropertiesToLowerCase((JObject)property.Value);

                property.Replace(new JProperty(property.Name.ToLower(), property.Value));// properties are read-only, so we have to replace them
            }
        }

下面是json文件

{
    "count": 82, 
    "next": "https://swapi.dev/api/people/?page=2", 
    "previous": null, 
    "results": [
        {
            "name": "Luke Skywalker", 
            "height": "172", 
            "mass": "77", 
            "hair_color": "blond", 
            "skin_color": "fair", 
            "eye_color": "blue", 
            "birth_year": "19BBY", 
            "gender": "male", 
            "homeworld": "https://swapi.dev/api/planets/1/", 
            "films": [
                "https://swapi.dev/api/films/1/", 
                "https://swapi.dev/api/films/2/", 
                "https://swapi.dev/api/films/3/", 
                "https://swapi.dev/api/films/6/"
            ], 
            "species": [], 
            "vehicles": [
                "https://swapi.dev/api/vehicles/14/", 
                "https://swapi.dev/api/vehicles/30/"
            ], 
            "starships": [
                "https://swapi.dev/api/starships/12/", 
                "https://swapi.dev/api/starships/22/"
            ], 
            "created": "2014-12-09T13:50:51.644000Z", 
            "edited": "2014-12-20T21:17:56.891000Z", 
            "url": "https://swapi.dev/api/people/1/"
        }, 
        {
            "name": "C-3PO", 
            "height": "167", 
            "mass": "75", 
            "hair_color": "n/a", 
            "skin_color": "gold", 
            "eye_color": "yellow", 
            "birth_year": "112BBY", 
            "gender": "n/a", 
            "homeworld": "https://swapi.dev/api/planets/1/", 
            "films": [
                "https://swapi.dev/api/films/1/", 
                "https://swapi.dev/api/films/2/", 
                "https://swapi.dev/api/films/3/", 
                "https://swapi.dev/api/films/4/", 
                "https://swapi.dev/api/films/5/", 
                "https://swapi.dev/api/films/6/"
            ], 
            "species": [
                "https://swapi.dev/api/species/2/"
            ], 
            "vehicles": [], 
            "starships": [], 
            "created": "2014-12-10T15:10:51.357000Z", 
            "edited": "2014-12-20T21:17:50.309000Z", 
            "url": "https://swapi.dev/api/people/2/"
        }, 
        
        }
    ]
}
车坦

您可以使用JsonConverter来解决您的问题。

您可以创建自己的 JsonConverter 来处理字符串值。在下面的代码中,我创建了这个客户 JsonConverter,以便在写入 JSON 时将字符串值转换为小写。

public class StringConverter : JsonConverter<string>
{
    public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
    {
        // converting to lower case string while writing to JSON outcome.
        writer.WriteValue(value.ToLower());
    }

    public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        // returning the value without change while deserializing.
        return (string)reader.Value;
    }
}

以下是您可以使用上述转换器的方式。

// let say your class name is SearchResult;
// JSON string is stored in jsonString variable.


var searchResult = JsonConvert.Deserialize<SearchResult>(jsonString);

var jsonStringLowerCase = JsonConvert.Serialize(jsonString, new StringConverter());

使用上面的代码jsonStringLowerCase,JSON 将所有字符串属性值转换为小写。

我希望这能帮助你解决你的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

反序列化JSON对象时,是否可以将属性名称转换为小写?

如何将包含LocalDate字段的json转换为可反序列化的格式?

反序列化对象数组:无法将 JSON 值转换为 System.String[]

如何反序列化此动态值JSON?

如何反序列化仅包含值的JSON数组?

如何将Newton.Json反序列化的通用对象转换为自定义对象?

如何将serde_json :: Value转换为实现反序列化特征的具体类型?

使用转换将 JSON 序列化/反序列化为 TypeScript

如何将 JSON 反序列化回类?

反序列化/将 JSON 转换为 C# 列表

将字符串转换为类型时出错-Newtonsoft JSON反序列化

使用Json.Net进行C#枚举反序列化:将值转换为类型时出错

如何将json文件反序列化回其序列化的通用列表?

如何反序列化json数组?

如何反序列化json响应

如何反序列化多维JSON

如何反序列化 Json Newtonsoft

如何反序列化oData JSON?

如何反序列化Json对象?

如何快速反序列化JSON

如何反序列化json?

如何反序列化 JSON 对象?

如何将 JSON 文件序列化和反序列化为 DataTable 以填充 DataGridView?

如何将JSON字典序列化/反序列化为数组

如何将嵌套的哈希表序列化/反序列化为JSON?

如何实现将复杂类型序列化/反序列化为简单类型的 Newtonsoft JSON 转换器

serialize:将数据结构反序列化到JSON /从JSON反序列化

如何反序列化JSON字符串以使对象放宽根值区分大小写?

Json.Net可以将反序列化的对象转换为Json中嵌入的类型吗?