這是我的 JSON:
{
firstName: 'Somebody',
lastName: 'Else'
}
我將其反序列化為JsonElement使用這些選項:
var options = new JsonSerializerOptions {
WriteIndented = true,
PropertyNameCaseInsensitive = true,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
但是后來我想搜索屬性,它變得區分大小寫。
element.GetProperty("FirstName") // this returns null
element.GetProperty("firstName") // this returns 'Somebody'
如何強制GetProperty方法不區分大小寫?
uj5u.com熱心網友回復:
根據檔案,您應該能夠JsonNamingPolicy像這樣創建一個可以完成這項作業的檔案:
using System.Text.Json;
namespace SystemTextJsonSamples
{
public class LowerCaseNamingPolicy : JsonNamingPolicy
{
public override string ConvertName(string name) =>
name.ToLower();
}
}
編輯:然后您可以通過將選項配置更改為以下內容來使用它:
var options = new JsonSerializerOptions {
WriteIndented = true,
PropertyNameCaseInsensitive = true,
PropertyNamingPolicy = new LowerCaseNamingPolicy()
};
編輯2:
那么您可以通過以下方式搜索該屬性:
element.GetProperty("FirstName".ToLower())
element.GetProperty("firstName".ToLower())
uj5u.com熱心網友回復:
如果您使用 NewtonSoft.Jason 的 LINQ to JSON,則不需要任何選項
試試這個代碼,假設 jObject = JObject.Parse(json)。此代碼已在 Visual Studio 中使用您的 json 進行了測驗
var firstName= jObject.Properties().First(i=>i.Name.ToLower()=="firstname").Value;
使用此演算法,您不僅可以使用 ==,還可以使用 Contains、StartWith、EndsEith。
var firstName= jObject.Properties().FirstOrDefault(i=> i.Name.ToLower()
.Contains("first")).Value;
uj5u.com熱心網友回復:
您可以為此撰寫擴展方法:
static class JEelementExtensions
{
public static object GetPropertyCaseInsensitive(this JsonElement element, string propertyName)
{
foreach (var property in element.EnumerateObject().OfType<JsonProperty>())
{
if (property.Name.Equals(propertyName, StringComparison.OrdinalIgnoreCase)) return property.Value;
}
return null;
}
}
用法:
var prop1 = element.GetPropertyCaseInsensitive("firstName");// this returns 'Somebody'
var prop2 = element.GetPropertyCaseInsensitive("FirstName");// this returns 'Somebody'
var prop3 = element.GetPropertyCaseInsensitive("fIrStNAmE");// this returns 'Somebody'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/381818.html
上一篇:LINQ:如何獲取1個月的記錄
