如何将 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": [
      ...
   ]
}