如何在 foreach 循环中将 JsonConvert jsonString 映射到 jsonObject?
How to map JsonConvert jsonString to jsonObject in foreach loop?
如何映射 JsonConvert
中的数据 我正在使用 Newtonsoft.Json 并使用循环 foreach 数据将 jsonString 转换为 jsonObject 并且我想获得如下结果的数据,我想对其进行分组来自 jsonObject 所有。感谢帮助。
我的参数:
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);
如何映射 JsonConvert
中的数据 我正在使用 Newtonsoft.Json 并使用循环 foreach 数据将 jsonString 转换为 jsonObject 并且我想获得如下结果的数据,我想对其进行分组来自 jsonObject 所有。感谢帮助。
我的参数:
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);