我的班级有以下字段
[JsonProperty("LTR-AMT-1")]
public string? LTRAMT1 { get; set; }
[JsonProperty("LTR-AMT-2")]
public string? LTRAMT2 { get; set; }
[JsonProperty("LTR-AMT-3")]
public string? LTRAMT3 { get; set; }
[JsonProperty("LTR-AMT-4")]
public string? LTRAMT4 { get; set; }
[JsonProperty("LTR-AMT-5")]
public string? LTRAMT5 { get; set; }
[JsonProperty("LTR-AMT-6")]
public string? LTRAMT6 { get; set; }
[JsonProperty("LTR-AMT-7")]
public string? LTRAMT7 { get; set; }
[JsonProperty("LTR-AMT-8")]
public string? LTRAMT8 { get; set; }
[JsonProperty("LTR-AMT-9")]
public string? LTRAMT9 { get; set; }
[JsonProperty("LTR-AMT-10")]
public string? LTRAMT10 { get; set; }
[JsonProperty("LTR-AMT-11")]
public string? LTRAMT11 { get; set; }
[JsonProperty("LTR-AMT-12")]
public string? LTRAMT12 { get; set; }
[JsonProperty("LTR-AMT-13")]
public string? LTRAMT13 { get; set; }
[JsonProperty("LTR-AMT-14")]
public string? LTRAMT14 { get; set; }
[JsonProperty("LTR-AMT-15")]
public string? LTRAMT15 { get; set; }
[JsonProperty("LTR-AMT-16")]
public string? LTRAMT16 { get; set; }
[JsonProperty("LTR-AMT-17")]
public string? LTRAMT17 { get; set; }
[JsonProperty("LTR-AMT-18")]
public string? LTRAMT18 { get; set; }
[JsonProperty("LTR-AMT-19")]
public string? LTRAMT19 { get; set; }
[JsonProperty("LTR-AMT-20")]
public string? LTRAMT20 { get; set; }
//using dictionary
//public Dictionary<string, string> LTRAMT { get; set; }
我没有在请求正文中按顺序获取这些字段。根据位置,我必须将其映射到相应的 LTRAMT 字段 我有以下方法可以做到这一点
public static string LtrAmounts(List<Amounts> amounts, int i)
{
var filter = amounts.FirstOrDefault(x => x.position == i);
return filter != null ? filter.value.ToString() : "";
}
请求正文:
"amounts": [
{
"value": 0,
"position": 1
},
{
"value": 1624.96,
"position": 2
},
{
"value": 9901010,
"position": 4
},
{
"value": 35776,
"position": 20
}
]
我尝试使用反射,它工作正常,但响应时间更长。
for (int i = 1; i <= 20; i++)
{
ltr.GetType().GetProperty($"LTRAMT{i}").SetValue(ltr, amounts != null ? LtrAmounts(amounts, i) : "");
}
还尝试过字典
private static Dictionary<string, string> AssignKeyAndValues(List<Amounts> amounts)
{
Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
for (int i = 1; i <= 20; i++)
{
string key = "LTRAMT" + i;
string value = LtrAmounts(amounts, i);
keyValuePairs[key] = value;
}
return keyValuePairs;
}
但是在响应中我得到了父对象,其中我的字段不是我的要求
{
"LTRAMT":
{
"LTRAMT1":"0",
"LTRAMT2":"1624.96",
"LTRAMT3:"",
"LTRAMT4":"9901010"
.........
"LTRAMT20":"35776"
}
}
我不想向父级 LTRAMT 发送响应。 需要帮助来完成此要求。任何其他建议也会有所帮助 预先感谢。
如果使用
Newtonsoft
,则可以使用 JsonExtensionData
属性。
请参阅:JsonExtensionDataAttribute
JsonExtensionDataAttribute 指示 JsonSerializer 将类型上没有匹配字段或属性的属性反序列化到指定集合中。在序列化期间,此集合中的值将写回实例的 JSON 对象。
例如:
public class Tram
{
[JsonExtensionData]
public Dictionary<string, object> LTRAMT { get; set; }
[JsonProperty("OTHER")]
public string Other { get; set; }
}
注意:您必须使用
Dictionary<string, object>
而不是 Dictionary<string, string>