【问题标题】:Deserialize JSON having keys with CamelCase and snake_case naming in C#在 C# 中反序列化具有 CamelCase 和 snake_case 命名键的 JSON
【发布时间】:2023-03-30 16:38:01
【问题描述】:

我正在通过 api 接收一个json 文件,该json 文件将被转换为一个我无法触摸的类并且具有大约 400 个属性。 json 用于键名 CamelCase,而在同一 json 中,一些键的格式为 snake_case。 我目前正在使用System.Text.Json,但需要更改为Newtonsoft.json。 我尝试创建一个JsonSnakeCaseNamingPolicy 类(仅将属性名称转换为snake_case)并在JsonSerializerOptions 中使用,如下所示:

var deserializeOptions = new JsonSerializerOptions()
{
    PropertyNameCaseInsensitive = true,
    PropertyNamingPolicy = new JsonSnakeCaseNamingPolicy()
};
var flexImport = JsonSerializer.Deserialize<List<FlexImport>>(input.MappedObjectJson, deserializeOptions);

但是 CamelCase 中的属性不会被填充。关于如何实现这种情况的任何想法?

这是json 示例:

[{\"BatchId\":123,\"Title_Id\":123,\"CurrentNumber\":\"aa705128\",\"address\":\"122 BLACKSGATE EN\",\"curr_interest_rate\":4},{\"BatchId\":2,\"Title_Id\":1,\"CurrentNumber\":\"27705128\",\"address\":\"90 ARMA DR\",\"curr_interest_rate\":5},{\"BatchId\":2,\"Title_Id\":2,\"CurrentNumber\":\"30877674\",\"address\":\"6485 N SIN CIR\",\"curr_interest_rate\":4}]"

这里是目标类的一部分:

public class FlexImport 
{
    public long BatchId { get; set; }
    public long TitleId { get; set; }
    public string CurrentNumber { get; set; }
    public string Address { get; set; }
    public decimal? CurrInterestRate { get; set; }

}

【问题讨论】:

    标签: c# json json-deserialization


    【解决方案1】:

    使用 JSON 属性

    public class FlexImport 
    {
        public long BatchId { get; set; }
        [JsonPropertyName("Title_Id")]
        public long TitleId { get; set; }
        public string CurrentNumber { get; set; }
        [JsonPropertyName("address")]
        public string Address { get; set; }
        [JsonPropertyName("curr_interest_rate")]
        public decimal? CurrInterestRate { get; set; }
    
    }
    

    等等。根据需要进行调整。

    【讨论】:

    • 我不能碰那个课
    • 在这种情况下,请考虑使用 newtonsoft 和使用 JObject.Parse。这将允许您通过 json 中的名称访问您的数据。例如访问 Title_Id myJObject[0]["Title_Id"]
    猜你喜欢
    • 2020-11-08
    • 1970-01-01
    • 2011-07-29
    • 2014-03-12
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    相关资源
    最近更新 更多