[英]How to convert json file to json array object for Deserializing into C# MVC model
我需要转换一个 json 文件以匹配 WebAPI 2 帖子(语言 C#)的视图模型参数。 但是当它到达 API 控制器时,参数(来自主体的数据)为空。
我的 .json 文件设置为匹配我的模型
{
"Data": {
"DataHeader": {
"MessageTrackingIdentifier": "18c64415-05cc-415e-9cf1-034bdc4dbdac",
"MessageName": "USERS"
},
"DataDetail": [
{
"CustomerCode": "0002888802",
"CustomerName": "SGG (Pty) Limited "
},
{
"CustomerCode": "0002034092",
"CustomerName": "AAG (Pty) Limited "
}
]
}
}
我的型号:
public class TUserModel
{
public TUserDataModel Data { get; set; }
}
public class TUserDataModel
{
public TDataHeader DataHeader { get; set; }
public List<TUserModelDataDetail> DataDetail { get; set; }
}
public class TUserModelDataDetail
{
public string CustomerCode { get; set; }
public string CustomerName { get; set; }
}
public class TDataHeader
{
public string MessageTrackingIdentifier { get; set; }
public string MessageName { get; set; }
}
我的 WebAPI 2 操作
public IHttpActionResult PostUser([FromBody] TUserModel model)
Ajax 后置函数:
function PostUserData(viewModel)
{
var model = JSON.stringify(viewModel);
$.ajax({
url: "http://localhost:60667/api/User",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
crossDomain: true,
data: model,
success: function (reply)
{
$('.js-call-UserApi').css("background", "green");
},
error: function (jqXHR, errorData)
{
alert('error: ' + JSON.stringify(jqXHR.responseText, errorData));
}
});
}
文件对 Ajax Post 函数的 js 调用:(它读取的文件名是“UserFA.json”)
var oXHR = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
function reportStatus()
{
if (oXHR.readyState == 4) // Request completed.
PostUserData(this.responseText); // All set. Now show the data.
}
oXHR.onreadystatechange = reportStatus;
oXHR.open("GET", "UserFA.json", true); // true = ASYNCHRONOUS REQUEST (DESIRABLE), false = SYNCHRONOUS REQUEST.
oXHR.send();
编辑:文件一旦读入并字符串化并清除格式字符
"{"Data":
{"DataHeader": {"MessageTrackingIdentifier": "18c64415-05cc-415e-9cf1-034bdc4dbdac", "MessageName": "USERS"},
"DataDetail":
[
{ "CustomerCode": "0002888802 ", "CustomerName": "SGG (Pty) Limited "},
{ "CustomerCode": "0002034092 ", "CustomerName": "AAG (Pty) Limited "}
]
}
}"
谢谢
您的 json 和模型不太匹配。 json 有一个名为“Data”的对象,其中包含“DataHeader”和“DataDetail”——但在你的模型中,这些属性在你的 TUserModel 对象中都处于同一级别,而 Data 是一个字符串而不是一个对象。 如果要更改模型以匹配 json,则需要将 TUserModel 更改为:
public class TUserModel
{
public TUserDataModel Data { get; set; }
}
并添加一个中间对象,我称之为 TUserDataModel:
public class TUserDataModel
{
public TDataHeader DataHeader { get; set; }
public List<TUserModelDataDetail> DataDetail { get; set; }
}
如果您想更改 json 并保持模型基本相同,则删除“数据”级别,从而将 DataHeader 和 DataDetail 向上移动。 然后,您还可以从 TUserModel 类中删除字符串“Data”属性。
{
"DataHeader": {
...
},
"DataDetail": [
...
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.