如何将 json 文件转换为 json 数组对象以反序列化为 C# MVC 模型
How to convert json file to json array object for Deserializing into C# MVC model
我需要转换 json 文件以匹配 WebAPI 2 post(语言 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; }
}
我的网站API 2 次操作
public IHttpActionResult PostUser([FromBody] TUserModel model)
Ajax post函数:
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));
}
});
}
文件的js调用Ajax Post函数:(读取的文件名是'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 对象和数据中都处于同一级别是一个字符串而不是一个对象。如果要更改模型以匹配 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 并使模型基本保持不变,请删除 "Data" 级别,从而向上移动 DataHeader 和 DataDetail。然后,您还可以从 TUserModel class.
中删除字符串 "Data" 属性
{
"DataHeader": {
...
},
"DataDetail": [
...
]
}
我需要转换 json 文件以匹配 WebAPI 2 post(语言 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; }
}
我的网站API 2 次操作
public IHttpActionResult PostUser([FromBody] TUserModel model)
Ajax post函数:
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));
}
});
}
文件的js调用Ajax Post函数:(读取的文件名是'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 对象和数据中都处于同一级别是一个字符串而不是一个对象。如果要更改模型以匹配 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 并使模型基本保持不变,请删除 "Data" 级别,从而向上移动 DataHeader 和 DataDetail。然后,您还可以从 TUserModel class.
中删除字符串 "Data" 属性{
"DataHeader": {
...
},
"DataDetail": [
...
]
}