【问题标题】:How to map JsonConvert jsonString to jsonObject in foreach loop?如何在 foreach 循环中将 JsonConvert jsonString 映射到 jsonObject?
【发布时间】:2019-11-29 04:23:52
【问题描述】:

如何在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
        }
    ]
}]

【问题讨论】:

  • 您似乎在询问 C# 代码。为什么要标记这是一个 Java 问题?如果确实涉及Java,请出示相关的Java代码并提供解释。谢谢。
  • @HovercraftFullOfEels 好的,先生,谢谢推荐。

标签: c# json jsonconvert


【解决方案1】:

只需使用 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);

【讨论】:

  • 我有一个关键字只能映射 fcode 数据,而您的代码只能映射一个数组,而另一个数据无法映射
  • 如果json数据有多个数组数据怎么办?
  • 你能告诉我一些包含多个数据数组的示例 json 格式吗?就像他们在你的情况下一样。应该有某种方法将对象与数组分开。如果您可以将代码格式化为输出 json,例如 "[{"fcode":"01234", "nav":"12.21", "navdate":"20190305"}, {{"fcode":"01234", " nav":"12.21", "navdate":"20190305"}]" 然后 Newtonsoft 会按预期自动解析。
  • [{"fcode": "017009","abbreviation": "PEQ","AMC": "PL","chnmain_scope": "Fund","risklevel": 6,"NAV": "[{"fcode":"017009"}, {"nav":"11.85240"}, {"navdate":"20190305"}, {"navDiff":"0.0000"}]"}, {"fcode": "004123","abbreviation": "ONE-UGERMF","AMC": "one""chnmain_scope": "FundForLift","risklevel": 6, "NAV": "[{"fcode":"004123"}, {"nav":"12.83210"}, {"navdate":"20190305"}, {"navDiff":"-0.0351"}]"}] 我所有从sql中获取的数据
  • 通过 sql 我将数据 NAV 获取为 jsonString 格式示例格式 "NAV": "[{\"fcode\":\"017009\"}, {\"nav\":\"11.85240\"}, {\"navdate\":\"20190305\"}, {\"navDiff\":\"0.0000\"}]" 并使用 Newstone 将 jsonSring 转换为 jasonObject 以返回子数组
猜你喜欢
  • 2018-01-06
  • 2011-07-11
  • 1970-01-01
  • 2021-12-08
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多