简体   繁体   English

传递给WEB.API Ajax调用时,为什么我的JSON数据会更改?

[英]Why is my JSON data getting changed when passed to a WEB.API Ajax call?

HTML JSON string (before Ajax Call) => HTML JSON字符串 (在Ajax调用之前)=>

"{
 "UnitOfMeasureRelatedUnitDataInbound": [
  {
   "Name": "test",
   "Active": true,
   "UnitOfMeasureTypeID": "dd89f0a0-59c3-49a1-a2ae-7e763da32065",
   "BaseUnitID": "4c835ebb-60f2-435f-a5f4-8dc311fbbca0",
   "BaseUnitName": null,
   "BaseUnitAbbreviation": null,
   "RelatedUnitDisplayOrder": 1,
   "RelatedUnitName": "Inch",
   "RelatedUnitAbbreviation": "in",
   "RelatedUnitConversionRatio": 25.4,
   "UnitOfMeasureSetID": "69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64"
  },
  {
   "Name": "test",
   "Active": true,
   "UnitOfMeasureTypeID": "dd89f0a0-59c3-49a1-a2ae-7e763da32065",
   "BaseUnitID": "4c835ebb-60f2-435f-a5f4-8dc311fbbca0",
   "BaseUnitName": null,
   "BaseUnitAbbreviation": null,
   "RelatedUnitDisplayOrder": 2,
   "RelatedUnitName": "Foot",
   "RelatedUnitAbbreviation": "ft",
   "RelatedUnitConversionRatio": 304.8,
   "UnitOfMeasureSetID": "69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64"
  },
  {
   "Name": "test",
   "Active": true,
   "UnitOfMeasureTypeID": "dd89f0a0-59c3-49a1-a2ae-7e763da32065",
   "BaseUnitID": "4c835ebb-60f2-435f-a5f4-8dc311fbbca0",
   "BaseUnitName": null,
   "BaseUnitAbbreviation": null,
   "RelatedUnitDisplayOrder": 3,
   "RelatedUnitName": "Yard",
   "RelatedUnitAbbreviation": "yd",
   "RelatedUnitConversionRatio": 914.4,
   "UnitOfMeasureSetID": "69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64"
  },
  {
   "Name": "test",
   "Active": true,
   "UnitOfMeasureTypeID": "dd89f0a0-59c3-49a1-a2ae-7e763da32065",
   "BaseUnitID": "4c835ebb-60f2-435f-a5f4-8dc311fbbca0",
   "BaseUnitName": null,
   "BaseUnitAbbreviation": null,
   "RelatedUnitDisplayOrder": 4,
   "RelatedUnitName": "Centimeter",
   "RelatedUnitAbbreviation": "cm",
   "RelatedUnitConversionRatio": 10,
   "UnitOfMeasureSetID": "69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64"
  },
  {
   "Name": "test",
   "Active": true,
   "UnitOfMeasureTypeID": "dd89f0a0-59c3-49a1-a2ae-7e763da32065",
   "BaseUnitID": "4c835ebb-60f2-435f-a5f4-8dc311fbbca0",
   "BaseUnitName": null,
   "BaseUnitAbbreviation": null,
   "RelatedUnitDisplayOrder": 5,
   "RelatedUnitName": "Decimeter",
   "RelatedUnitAbbreviation": "dm",
   "RelatedUnitConversionRatio": 100,
   "UnitOfMeasureSetID": "69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64"
  },
  {
   "Name": "test",
   "Active": true,
   "UnitOfMeasureTypeID": "dd89f0a0-59c3-49a1-a2ae-7e763da32065",
   "BaseUnitID": "4c835ebb-60f2-435f-a5f4-8dc311fbbca0",
   "BaseUnitName": null,
   "BaseUnitAbbreviation": null,
   "RelatedUnitDisplayOrder": 6,
   "RelatedUnitName": "Meter",
   "RelatedUnitAbbreviation": "m",
   "RelatedUnitConversionRatio": 1000,
   "UnitOfMeasureSetID": "69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64"
  }
 ]
}"

var jsonString = JsonConvert.SerializeObject(UnitOfMeasureRelatedUnitDataInbound);

(after Ajax Call) => (在Ajax调用之后) =>

"{\"{\\n \\\"UnitOfMeasureRelatedUnitDataInbound\\\": \":{\"\\n  {\\n   \\\"Name\\\": \\\"test\\\",\\n   \\\"Active\\\": true,\\n   \\\"UnitOfMeasureTypeID\\\": \\\"dd89f0a0-59c3-49a1-a2ae-7e763da32065\\\",\\n   \\\"BaseUnitID\\\": \\\"4c835ebb-60f2-435f-a5f4-8dc311fbbca0\\\",\\n   \\\"BaseUnitName\\\": null,\\n   \\\"BaseUnitAbbreviation\\\": null,\\n   \\\"RelatedUnitDisplayOrder\\\": 1,\\n   \\\"RelatedUnitName\\\": \\\"Inch\\\",\\n   \\\"RelatedUnitAbbreviation\\\": \\\"in\\\",\\n   \\\"RelatedUnitConversionRatio\\\": 25.4,\\n   \\\"UnitOfMeasureSetID\\\": \\\"69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64\\\"\\n  },\\n  {\\n   \\\"Name\\\": \\\"test\\\",\\n   \\\"Active\\\": true,\\n   \\\"UnitOfMeasureTypeID\\\": \\\"dd89f0a0-59c3-49a1-a2ae-7e763da32065\\\",\\n   \\\"BaseUnitID\\\": \\\"4c835ebb-60f2-435f-a5f4-8dc311fbbca0\\\",\\n   \\\"BaseUnitName\\\": null,\\n   \\\"BaseUnitAbbreviation\\\": null,\\n   \\\"RelatedUnitDisplayOrder\\\": 2,\\n   \\\"RelatedUnitName\\\": \\\"Foot\\\",\\n   \\\"RelatedUnitAbbreviation\\\": \\\"ft\\\",\\n   \\\"RelatedUnitConversionRatio\\\": 304.8,\\n   \\\"UnitOfMeasureSetID\\\": \\\"69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64\\\"\\n  },\\n  {\\n   \\\"Name\\\": \\\"test\\\",\\n   \\\"Active\\\": true,\\n   \\\"UnitOfMeasureTypeID\\\": \\\"dd89f0a0-59c3-49a1-a2ae-7e763da32065\\\",\\n   \\\"BaseUnitID\\\": \\\"4c835ebb-60f2-435f-a5f4-8dc311fbbca0\\\",\\n   \\\"BaseUnitName\\\": null,\\n   \\\"BaseUnitAbbreviation\\\": null,\\n   \\\"RelatedUnitDisplayOrder\\\": 3,\\n   \\\"RelatedUnitName\\\": \\\"Yard\\\",\\n   \\\"RelatedUnitAbbreviation\\\": \\\"yd\\\",\\n   \\\"RelatedUnitConversionRatio\\\": 914.4,\\n   \\\"UnitOfMeasureSetID\\\": \\\"69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64\\\"\\n  },\\n  {\\n   \\\"Name\\\": \\\"test\\\",\\n   \\\"Active\\\": true,\\n   \\\"UnitOfMeasureTypeID\\\": \\\"dd89f0a0-59c3-49a1-a2ae-7e763da32065\\\",\\n   \\\"BaseUnitID\\\": \\\"4c835ebb-60f2-435f-a5f4-8dc311fbbca0\\\",\\n   \\\"BaseUnitName\\\": null,\\n   \\\"BaseUnitAbbreviation\\\": null,\\n   \\\"RelatedUnitDisplayOrder\\\": 4,\\n   \\\"RelatedUnitName\\\": \\\"Centimeter\\\",\\n   \\\"RelatedUnitAbbreviation\\\": \\\"cm\\\",\\n   \\\"RelatedUnitConversionRatio\\\": 10,\\n   \\\"UnitOfMeasureSetID\\\": \\\"69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64\\\"\\n  },\\n  {\\n   \\\"Name\\\": \\\"test\\\",\\n   \\\"Active\\\": true,\\n   \\\"UnitOfMeasureTypeID\\\": \\\"dd89f0a0-59c3-49a1-a2ae-7e763da32065\\\",\\n   \\\"BaseUnitID\\\": \\\"4c835ebb-60f2-435f-a5f4-8dc311fbbca0\\\",\\n   \\\"BaseUnitName\\\": null,\\n   \\\"BaseUnitAbbreviation\\\": null,\\n   \\\"RelatedUnitDisplayOrder\\\": 5,\\n   \\\"RelatedUnitName\\\": \\\"Decimeter\\\",\\n   \\\"RelatedUnitAbbreviation\\\": \\\"dm\\\",\\n   \\\"RelatedUnitConversionRatio\\\": 100,\\n   \\\"UnitOfMeasureSetID\\\": \\\"69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64\\\"\\n  },\\n  {\\n   \\\"Name\\\": \\\"test\\\",\\n   \\\"Active\\\": true,\\n   \\\"UnitOfMeasureTypeID\\\": \\\"dd89f0a0-59c3-49a1-a2ae-7e763da32065\\\",\\n   \\\"BaseUnitID\\\": \\\"4c835ebb-60f2-435f-a5f4-8dc311fbbca0\\\",\\n   \\\"BaseUnitName\\\": null,\\n   \\\"BaseUnitAbbreviation\\\": null,\\n   \\\"RelatedUnitDisplayOrder\\\": 6,\\n   \\\"RelatedUnitName\\\": \\\"Meter\\\",\\n   \\\"RelatedUnitAbbreviation\\\": \\\"m\\\",\\n   \\\"RelatedUnitConversionRatio\\\": 1000,\\n   \\\"UnitOfMeasureSetID\\\": \\\"69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64\\\"\\n  }\\n ]\\n}\":\"\"}}"

var jo = JObject.Parse(jsonString); => =>

{
  "{\n \"UnitOfMeasureRelatedUnitDataInbound\": ": {
    "\n  {\n   \"Name\": \"test\",\n   \"Active\": true,\n   \"UnitOfMeasureTypeID\": \"dd89f0a0-59c3-49a1-a2ae-7e763da32065\",\n   \"BaseUnitID\": \"4c835ebb-60f2-435f-a5f4-8dc311fbbca0\",\n   \"BaseUnitName\": null,\n   \"BaseUnitAbbreviation\": null,\n   \"RelatedUnitDisplayOrder\": 1,\n   \"RelatedUnitName\": \"Inch\",\n   \"RelatedUnitAbbreviation\": \"in\",\n   \"RelatedUnitConversionRatio\": 25.4,\n   \"UnitOfMeasureSetID\": \"69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64\"\n  },\n  {\n   \"Name\": \"test\",\n   \"Active\": true,\n   \"UnitOfMeasureTypeID\": \"dd89f0a0-59c3-49a1-a2ae-7e763da32065\",\n   \"BaseUnitID\": \"4c835ebb-60f2-435f-a5f4-8dc311fbbca0\",\n   \"BaseUnitName\": null,\n   \"BaseUnitAbbreviation\": null,\n   \"RelatedUnitDisplayOrder\": 2,\n   \"RelatedUnitName\": \"Foot\",\n   \"RelatedUnitAbbreviation\": \"ft\",\n   \"RelatedUnitConversionRatio\": 304.8,\n   \"UnitOfMeasureSetID\": \"69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64\"\n  },\n  {\n   \"Name\": \"test\",\n   \"Active\": true,\n   \"UnitOfMeasureTypeID\": \"dd89f0a0-59c3-49a1-a2ae-7e763da32065\",\n   \"BaseUnitID\": \"4c835ebb-60f2-435f-a5f4-8dc311fbbca0\",\n   \"BaseUnitName\": null,\n   \"BaseUnitAbbreviation\": null,\n   \"RelatedUnitDisplayOrder\": 3,\n   \"RelatedUnitName\": \"Yard\",\n   \"RelatedUnitAbbreviation\": \"yd\",\n   \"RelatedUnitConversionRatio\": 914.4,\n   \"UnitOfMeasureSetID\": \"69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64\"\n  },\n  {\n   \"Name\": \"test\",\n   \"Active\": true,\n   \"UnitOfMeasureTypeID\": \"dd89f0a0-59c3-49a1-a2ae-7e763da32065\",\n   \"BaseUnitID\": \"4c835ebb-60f2-435f-a5f4-8dc311fbbca0\",\n   \"BaseUnitName\": null,\n   \"BaseUnitAbbreviation\": null,\n   \"RelatedUnitDisplayOrder\": 4,\n   \"RelatedUnitName\": \"Centimeter\",\n   \"RelatedUnitAbbreviation\": \"cm\",\n   \"RelatedUnitConversionRatio\": 10,\n   \"UnitOfMeasureSetID\": \"69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64\"\n  },\n  {\n   \"Name\": \"test\",\n   \"Active\": true,\n   \"UnitOfMeasureTypeID\": \"dd89f0a0-59c3-49a1-a2ae-7e763da32065\",\n   \"BaseUnitID\": \"4c835ebb-60f2-435f-a5f4-8dc311fbbca0\",\n   \"BaseUnitName\": null,\n   \"BaseUnitAbbreviation\": null,\n   \"RelatedUnitDisplayOrder\": 5,\n   \"RelatedUnitName\": \"Decimeter\",\n   \"RelatedUnitAbbreviation\": \"dm\",\n   \"RelatedUnitConversionRatio\": 100,\n   \"UnitOfMeasureSetID\": \"69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64\"\n  },\n  {\n   \"Name\": \"test\",\n   \"Active\": true,\n   \"UnitOfMeasureTypeID\": \"dd89f0a0-59c3-49a1-a2ae-7e763da32065\",\n   \"BaseUnitID\": \"4c835ebb-60f2-435f-a5f4-8dc311fbbca0\",\n   \"BaseUnitName\": null,\n   \"BaseUnitAbbreviation\": null,\n   \"RelatedUnitDisplayOrder\": 6,\n   \"RelatedUnitName\": \"Meter\",\n   \"RelatedUnitAbbreviation\": \"m\",\n   \"RelatedUnitConversionRatio\": 1000,\n   \"UnitOfMeasureSetID\": \"69f5a1f5-b26c-5ef6-42ca-08ec6fc8ba64\"\n  }\n ]\n}": ""
  }
}

var _UnitOfMeasureRelatedUnitData = jo["UnitOfMeasureRelatedUnitDataInbound"]; => null (supposed to be 6 elements) => null(假定为6个元素)

List<UnitsOfMeasure.UnitOfMeasureRelatedUnitDataInbound> _UnitOfMeasureRelatedUnitDataList = JsonConvert.DeserializeObject<List<UnitsOfMeasure.UnitOfMeasureRelatedUnitDataInbound>>(_UnitOfMeasureRelatedUnitData.ToString()); (Results in the following error) => (导致以下错误)=>

An exception of type 'System.NullReferenceException' occurred in Admin.Web.API.dll but was not handled in user code. Admin.Web.API.dll中发生类型'System.NullReferenceException'的异常,但未在用户代码中处理。 Additional information: Object reference not set to an instance of an object. 附加信息:对象引用未设置为对象的实例。

Complete code: 完整的代码:

 var _UnitOfMeasureRelatedUnitData = []; var rows = $('#jqxUOMRelatedUnitsDropdownGrid').jqxGrid('getrows'); var RecordCount = 0; if (rows.length !== 1 && rows[0]["UOMRelatedUnit_Name"] !== "") { for (var i = 0; i < rows.length; i++) { var row = rows[i]; var _row = {}; if (row.UOMRelatedUnit_AddItem) { RecordCount += 1; _row["Name"] = $("#txtUnitOfMeasureSetName").val(); _row["Active"] = T; _row["UnitOfMeasureTypeID"] = $("input[type='radio'][id='rblUnitOfMeasureType']:checked").val(); _row["BaseUnitID"] = $("input[type='radio'][id='rblUnitOfMeasureBaseUnit']:checked").val(); _row["BaseUnitName"] = null; _row["BaseUnitAbbreviation"] = null; _row["RelatedUnitDisplayOrder"] = RecordCount; _row["RelatedUnitName"] = row.UOMRelatedUnit_Name; _row["RelatedUnitAbbreviation"] = row.UOMRelatedUnit_Abbreviation; _row["RelatedUnitConversionRatio"] = row.UOMRelatedUnit_ConversionOfBaseUnits; _row["UnitOfMeasureSetID"] = UnitOfMeasureSetID; _UnitOfMeasureRelatedUnitData[i] = _row; } } var jsonData = JSON.stringify({ UnitOfMeasureRelatedUnitDataInbound: _UnitOfMeasureRelatedUnitData }, null, ' '); callService("POST", g_WebServiceUnitOfMeasureRelatedUnitsCreateURL, jsonData, 'json', function(jsonResult) {}); } 

WEB.API Code: WEB.API代码:

[Route("api/admin/UnitsOfMeasure/UnitOfMeasureRelatedUnitsCreate")]
[HttpPost]
[ResponseType(typeof(UnitsOfMeasure.UnitsOfMeasureDataWithMessage))]
public IHttpActionResult UnitOfMeasureRelatedUnitsCreate([FromBody] JObject UnitOfMeasureRelatedUnitDataInbound)
{
    var jsonString = JsonConvert.SerializeObject(UnitOfMeasureRelatedUnitDataInbound);
    var jo = JObject.Parse(jsonString);
    var _UnitOfMeasureRelatedUnitData = jo["UnitOfMeasureRelatedUnitDataInbound"];
    List<UnitsOfMeasure.UnitOfMeasureRelatedUnitDataInbound> _UnitOfMeasureRelatedUnitDataList = JsonConvert.DeserializeObject<List<UnitsOfMeasure.UnitOfMeasureRelatedUnitDataInbound>>(_UnitOfMeasureRelatedUnitData.ToString());

    UnitsOfMeasure _UnitsOfMeasure = new UnitsOfMeasure();
    UnitsOfMeasure.UnitsOfMeasureDataWithMessage _UnitsOfMeasureDataWithMessage = _UnitsOfMeasure.UnitOfMeasureRelatedUnits_Create(_UnitOfMeasureRelatedUnitDataList);

    return Ok(_UnitsOfMeasureDataWithMessage);
}

Data Class: 资料类别:

public class UnitOfMeasureRelatedUnitDataInbound
{
    public string Name { get; set; }
    public Nullable<bool> Active { get; set; }
    public Nullable<Guid> UnitOfMeasureTypeID { get; set; }
    public Nullable<Guid> BaseUnitID { get; set; }
    public string BaseUnitName { get; set; }
    public string BaseUnitAbbreviation { get; set; }
    public Nullable<int> RelatedUnitDisplayOrder { get; set; }
    public string RelatedUnitName { get; set; }
    public string RelatedUnitAbbreviation { get; set; }
    public Nullable<double> RelatedUnitConversionRatio { get; set; }
    public Nullable<Guid> UnitOfMeasureSetID { get; set; }
}

and DAL: DAL:

public UnitsOfMeasureDataWithMessage UnitOfMeasureRelatedUnits_Create(List<UnitOfMeasureRelatedUnitDataInbound> _UnitOfMeasureRelatedUnitDataInbound)
{
    UnitsOfMeasureDataWithMessage _oUnitsOfMeasureDataWithMessage = new UnitsOfMeasureDataWithMessage();
    return _oUnitsOfMeasureDataWithMessage;
}

My questions are: 我的问题是:

  1. Why is/are the JSON strings getting changed on each iteration? 为什么每次迭代都更改JSON字符串?
  2. Is there a way to simply make the inbound JSON string as generic programmatically in order to get this thing working? 是否有一种方法可以简单地以编程方式使入站JSON字符串通用,以使此功能正常工作?
  3. If there is a way, what is it or are there examples (which I am unable to find) out there that can assist? 如果有办法,那是什么?有没有可以帮助您的例子(我找不到)?

Found a workaround. 找到了解决方法。 Apparently, I was trying to hard to get this accomplished by over complicating the issue. 显然,我试图通过使问题变得过于复杂来努力实现这一目标。

http://kwilson.me.uk/blog/post-an-array-of-objects-to-webapi-using-jquery/ http://kwilson.me.uk/blog/post-an-array-of-objects-to-webapi-using-jquery/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 WEB API + ASP.NET尝试以json格式显示来自WEB.API的数据 - WEB API + ASP.NET trying to display data from WEB.API in json format 为什么我对web.api的请求被长时间运行的控制器代码阻止了? - Why are my requests to web.api being blocked by long running controller code? 为什么我从 Web API 调用方法时得到数组 JSON 响应? - Why I am getting array JSON response when I call method from Web API? 如何在WEB.API中显示自定义错误JSON结果 - How to Display custom errors JSON Result in WEB.API 为什么尝试使用我的ajax调用返回的promise时我没有任何数据 - Why am I not getting any data when trying to use the promise returned from my ajax call 为什么我的 jQuery Ajax json 数组数据会重复? - Why is my jQuery Ajax json array data getting repeated? 在ajax调用中遇到解析错误,但数据已成功传递 - Getting a parse-error in ajax call but the data is getting passed successfully 在jQuery中使用$ .ajax()函数调用时,不会传递JSON对象 - No JSON object gets passed when using $.ajax() function call in jQuery 当我的JSON数据作为数据属性从erb传递给Javascript时,为什么会丢失? - Why does my JSON data get lost when passed as a data attribute from erb to Javascript? 当我调用从数据库检索数据的Web服务时,我的jquery ajax调用不起作用 - My jquery ajax call is not working when I call web services which retrieves data from database
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM