c# - 如何在 foreach 循环中将 JsonConvert jsonString 映射到 jsonObject?
问题描述
如何JsonConvert
通过我使用 Newtonsoft.Json 并使用循环 foreach 数据将 jsonString 转换为 jsonObject 来映射数据,我想从 jsonObject all 中获取类似于以下结果的数据。感谢您的帮助。
我的参数:
public class FundInPortRes
{
public string fcode { get; set; }
public string abbreviation { get; set; }
public string chnfname { get; set; }
public string AMC { get; set; }
public string chnmain_scope { get; set; }
public string risklevel { get; set; }
public List<FundInPortNAVRes> NAV { get; set; }
}
public class FundInPortNAVRes
{
public string fcode { get; set; }
public string navdate { get; set; }
public string nav { get; set; }
public double navDiff { get; set; }
}
我的代码:
Array Data F.NAV = [{"fcode":"004123"}, {"nav":"12.83210"}, {"navdate":"20190305"}, {"navDiff":"-0.0351"}]
[HttpPost]
public List<Models.FundInPortRes> GetFund2InPort(Models.FundInPortReq model)
{
DataAccess.DashDAL dal = new DataAccess.DashDAL();
List<Models.FundAllRes> models = dal.GetFund2InPort(model);
List<Models.FundInPortRes> result = new List<Models.FundInPortRes>();
if (models.Count > 0)
{
foreach (var F in models)
{
Models.FundInPortRes resData = new Models.FundInPortRes();
resData.fcode = F.fcode;
resData.abbreviation = F.abbreviation;
resData.chnfname = F.chnfname;
resData.AMC = F.AMC;
resData.chnmain_scope = F.chnmain_scope;
resData.risklevel = F.risklevel;
resData.NAV = JsonConvert.DeserializeObject<List<Models.FundInPortNAVRes>>(F.NAV);
result.Add(resData);
}
}
return result;
}
我的结果:
[{
"fcode": "004009",
"abbreviation": "FLEX-RMF",
"AMC": "ONEONLINE",
"chnmain_scope": "Fund All",
"risklevel": "5",
"NAV": [{
"fcode": "004009",
"navdate": null,
"nav": null,
"navDiff": 0.0
},
{
"fcode": null,
"navdate": null,
"nav": "27.14270",
"navDiff": 0.0
},
{
"fcode": null,
"navdate": "20190306",
"nav": null,
"navDiff": 0.0
},
{
"fcode": null,
"navdate": null,
"nav": null,
"navDiff": -0.1715
}
]
}]
我想要的结果:
[{
"fcode": "004009",
"abbreviation": "FLEX-RMF",
"AMC": "ONEONLINE",
"chnmain_scope": "Fund All",
"risklevel": "5",
"NAV": [{
"fcode": "004009",
"navdate": "20190306",
"nav": "27.14270",
"navDiff": -0.1715
}
]
}]
解决方案
只需使用 Newtonsoft 的 JsonProperty。这是一个示例代码。
using Newtonsoft.Json;
// ...
public class FundInPortRes
{
[JsonProperty("NameOfThePropertyToMap")]
public string fcode { get; set; }
// Other properties
}
更新:
在您的情况下,结果是正确的。您所做的只是创建一个“FundInPortNAVRes”列表,每个字段的值分配给不同的对象。您需要做的只是将所有字段的值组合到一个对象中。这是一个简单的方法:
// Here every field are assigned to different object instead of one.
var json = "[{ \"fcode\":\"004123\"},{ \"nav\":\"12.83210\"},{ \"navdate\":\"20190305\"},{ \"nav2\":\"12.8672\"},{ \"navDate2\":\"20190306\"},{ \"navDiff\":\"-0.0351\"}]";
// so we change the json so that the field will be for a single object.
var actualRequiredJson = json.Replace("},{", ",");
// For multiple items but in a specific sequence
var multipleItemsJson = actualRequiredJson.Replace(",\"fcode\":","},{\"fcode\":");
var response = JsonConvert.DeserializeObject<List<FundInPortNAVRes>>(actualRequiredJson);
推荐阅读
- asp.net - 如何创建包含 JavaScript 互操作的 Blazor 库
- python - 错误:列
是没有时区的时间戳类型,但表达式的类型是字符变化 - reactjs - 在 console.log 上反应的 API 表现不同
- c# - 在 linq 中对具有不同标准的订单线进行排序
- c# - 无法在 DLL“OraOps12.dll”中找到名为“OpsConGetMaxOpenCursorInfo”的入口点
- r - 在一列中按类别和不同日期分组
- powershell - PSCustomObject 页面 - 页面限制设置为 25
- php - 从PHP下载时无法打开文件作为文件损坏
- c# - Excel 单元格始终为空
- c# - Polly 断路器处理和未处理的异常