繁体   English   中英

如何将 json 文件转换为 json 数组对象以反序列化为 C# MVC 模型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM