Csharp/C#教程:在将JSON解析为JToken时如何将所有键更改为小写分享


在将JSON解析为JToken时如何将所有键更改为小写

我有一个JSON字符串,键有大写和小写字符:

{"employees":[ {"FIrstName":"John", "LASTname":"Doe"}, {"FIRSTNAME":"Anna", "LaSTNaME":"Smith"}, {"firstName":"Peter", "lastName":"Jones"} ]} 

我想将它转换为JToken对象,并将JToken所有键都JToken为小写。 所以JToken内部应该如下:

 {"employees":[ {"firstname":"John", "lastname":"Doe"}, {"firstname":"Anna", "lastname":"Smith"}, {"firstname":"Peter", "lastname":"Jones"} ]} 

以前我用的是JToken json = JToken.Parse(jsonString); 转换,但我不知道如何使键小写。 有任何想法吗?

我需要这样做的原因是我的JsonSchemavalidation将不区分大小写。

使用最少代码解决此问题的一种可能方法是子类化JsonTextReader并覆盖Value属性,以便在当前TokenTypePropertyName时返回小写字符串:

 public class LowerCasePropertyNameJsonReader : JsonTextReader { public LowerCasePropertyNameJsonReader(TextReader textReader) : base(textReader) { } public override object Value { get { if (TokenType == JsonToken.PropertyName) return ((string)base.Value).ToLower(); return base.Value; } } } 

这是有效的,因为底层JsonTextReader在其内部状态发生变化时保持TokenType更新,并且序列化程序(实际上是JsonSerializerInternalReader类)依赖于它通过Value属性从阅读器检索属性名称时。

您可以创建一个简短的帮助方法,以便使用自定义阅读器轻松反序列化:

 public static class JsonHelper { public static JToken DeserializeWithLowerCasePropertyNames(string json) { using (TextReader textReader = new StringReader(json)) using (JsonReader jsonReader = new LowerCasePropertyNameJsonReader(textReader)) { JsonSerializer ser = new JsonSerializer(); return ser.Deserialize(jsonReader); } } } 

然后在你的代码中,只需替换它:

 JToken json = JToken.Parse(jsonString); 

有了这个:

 JToken json = JsonHelper.DeserializeWithLowerCasePropertyNames(jsonString); 

小提琴: https : //dotnetfiddle.net/A0S3I1

上述就是C#学习教程:在将JSON解析为JToken时如何将所有键更改为小写分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1020053.html

(0)
上一篇 2022年1月4日
下一篇 2022年1月4日

精彩推荐