【问题标题】:C# json.net json string loop to place into classC# json.net json 字符串循环放入类
【发布时间】:2017-12-14 12:17:16
【问题描述】:

嘿,我需要一些帮助,试图弄清楚如何在我的 asp.net mvc 页面中将返回的 JSON.stringify 字符串循环到 POST。

我的javascript:

var result = JSON.stringify(data);

$.ajax({
  type: 'POST',
  url: 'saveUpdate',
  cache: false,
  dataType: 'json',
  data: {
      bomdata: result
  },
  success: function (response) {
      console.log('has been updated');
  },
  error: function (response) {
      console.log(response);
  }
});

还有我的 ASP.net MVC 控制器代码:

[HttpPost]
public string saveUpdate(string bomdata)
{
    dynamic dynJson = JsonConvert.DeserializeObject(bomdata);

    //Needing to add the loop here and place all data into my class
    //and continue until its at the end of the loop          

    resultsBack.Add("dback", "GOOD");
    resultsBack.Add("dhead", "Added BOM # " + bomdata.number);
    resultsBack.Add("dinfo", "BOM was updated successfully");
    resultsBack.Add("guid", bomdata.theGuid);

    return JsonConvert.SerializeObject(resultsBack, Formatting.Indented);
}

以及正在发布的 json 字符串:

[{
  "description": "1f43f",
  "environment": 2,
  "manufacturer": 3,
  "vendor": 5,
  "hardwarePartNumber": "v3rg",
  "hardwareModelNumber": "35hg33",
  "softwarePartNumber": "3f",
  "softwareVersion": "2f",
  "guid": ""
}, {
  "description": "674h",
  "environment": 5,
  "manufacturer": 1,
  "vendor": 33,
  "hardwarePartNumber": "54eth",
  "hardwareModelNumber": "5yh55",
  "softwarePartNumber": "32hnj4",
  "softwareVersion": "4.9",
  "guid": ""
}]

我的班级:

public class bValues
{
    public string description { get; set; }
    public int environment { get; set; }
    public int manufacturer { get; set; }
    public int vendor { get; set; }
    public string hardwarePartNumber { get; set; }
    etc...etc....
}

我真正需要的是能够遍历该 json 并将数据放入我的类中,将其保存到我的数据库中,然后根据其中的数据量使用另一个循环再次执行此操作。

所以,从上面的例子中,我有 2 组 json 值返回 [{ set1 },{ set2 }]

我想将 每个 集合放入我的班级:

Dictionary<string, string> _tmpParms = new Dictionary<string, string>();
StringBuilder buildTblVal = new StringBuilder();
StringBuilder buildTblName = new StringBuilder();

//Start loop....
HELPer.bomLineValues bomdata = JsonConvert.DeserializeObject<HELPer.bomLineValues>(bomdata);

//Now loop through that set and format it like
//blah1: something1, blah2: something2, blah3: something3, etc..
foreach (var prop in bomdata.GetType().GetProperties())
{
   if (prop.PropertyType.Name == "Int32")
   {
      buildTblVal.Append(prop.Name + ": " + prop.GetValue(bomdata) + ",");
   }
   else
   {
      buildTblVal.Append(prop.Name + ": " + "'" + prop.GetValue(bomdata) + "',");
   }
}

//Remove trailing comma
buildTblVal.Length = buildTblVal.Length - 1;
buildTblName.Length = buildTblName.Length - 1;

//Now save to the DB
_tmpParms.Add("1", buildTblName.ToString());
_tmpParms.Add("2", buildTblVal.ToString());            
SQLHelper.callSQLSP("spUpdateBom", _tmpParms, "", false);

//Now loop back and get the next set of data to do the same with

任何帮助都会很棒!

【问题讨论】:

  • 当你有一个代表数据的 POCO 类时,你为什么要使用dynamic
  • 我认为你可以做到这一点var data = JsonConvert.DeserializeObject&lt;IEnumerable&lt;bValues&gt;&gt;(bomdata);
  • @mmushtaq 当我这样做时,我得到 Error CS1056 Unexpected character '​'

标签: c# asp.net asp.net-mvc json.net stringify


【解决方案1】:

您是否尝试过反序列化为您已经创建的 POCO 类?

bValues[] results = JsonConvert.DeserializeObject<bValues[]>(bomdata);

然后迭代结果:

foreach (bValues item in results )
{
    //do something with item.description 
    //do something with item.vendor
    //etc
}

【讨论】:

  • 不错的 maccettura,但我希望最终将这些值添加到我的类中,然后保存该数据并再次循环并再次执行相同的操作。
  • 您要向哪个类添加值?
  • 更新了我的 OP,希望以后能做得更多。
  • 使用我的解决方案,您的数据已经在您的班级中results 将是 bValues 对象的数组,每组 json 都有一个对象。
  • 正确,但我如何循环使用它,因为它有不止一组值?
猜你喜欢
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多