gpt4 book ai didi

C# 使用 json.net 反序列化 JSON,想要提取数组索引作为模型属性

转载 作者:行者123 更新时间:2023-11-30 17:36:14 25 4
gpt4 key购买 nike

我成功地将 RESTful GET 请求返回的 JSON 数组反序列化到我的 C# 普通旧对象模型中。

我正在使用 [JSONProperty foo] 注释将 JSON 名称绑定(bind)到我的模型属性。

返回的 JSON 如下所示:

[{
"ProductCode": "0129923083091",
"Description": "DIESEL ",
"SalesLitres": 6058.7347,
"SalesValue": 6416.2000
},
{
"ProductCode": "0134039344902",
"Description": "UNLEADED ",
"SalesLitres": 3489.8111,
"SalesValue": 3695.7100
},
...
]

我想在我的模型中创建类似于唯一索引字段的东西,它是根据从 JSON 返回的数组项的出现顺序合成的。

作为引用,我当前的注释(没有索引属性)看起来像这样:

namespace App8.Models
{
public class ReportRow
{
[JsonProperty("ProductCode")]
public string ProductCode { get; set; } = string.Empty;

[JsonProperty("Description")]
public string Description { get; set; } = string.Empty;

[JsonProperty("SalesLitres")]
public double SalesLitres { get; set; } = 0.0;

[JsonProperty("SalesValue")]
public double SalesValue { get; set; } = 0.0;
}
}

Newtonsoft JSON.net 是否为此提供了注释...或者,我是否可以在 getter/setter 中放置一些代码来本质上制造主键?

最佳答案

假设

public class ReportRow {
public int Index { get; set; }

[JsonProperty("ProductCode")]
public string ProductCode { get; set; } = string.Empty;

[JsonProperty("Description")]
public string Description { get; set; } = string.Empty;

[JsonProperty("SalesLitres")]
public double SalesLitres { get; set; } = 0.0;

[JsonProperty("SalesValue")]
public double SalesValue { get; set; } = 0.0;
}

反序列化数据后

var data = JsonConvert.DeserializeObject<List<ReportRow>>(json);

您可以使用 linq select 获取索引。

var indexedData = data.Select((item, index) => {
item.Index = index;
return item;
}).ToList();

或者,如果索引不是模型的属性,则创建一个动态类型。

var indexedData = data.Select((item, index) => new {
Index = index,
ReportRow = item
}).ToList();

关于C# 使用 json.net 反序列化 JSON,想要提取数组索引作为模型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39914334/

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