如何用`[Serializable]属性来装饰一个类有什么不同?

时间:2017-03-20 09:52:58

标签: c# angularjs serialization asp.net-web-api

进一步提出我的问题,

What is causing the model to null

我花了3个多小时才发现原因。作为点击尝试过程的一部分,我从班级&中删除了[Serializable]令人惊讶的模型开始获得价值。

Angular Service: -

app.service('loginService', ['$http', function ($http) {

this.userLogin = function (user) {
   console.log(user); //prints {'username': 'username@gmail.com', 'password': 123'}
    $http(
   {
       url: "/api/user/login",
       method: "POST",
       data: { 'model': user },
       contentType: "application/json"
   })
   .then(function (data) {
       if (data.status.toLower() === "success") {
           return data;
       }
       else {
           return null;
       }
   });
}

角度控制器

app.controller('homeCtrl', ['$scope', 'loginService', function ($scope, loginService) {
$scope.login = function (user) {
    debugger;
    console.log($scope.user);
    var data = loginService.userLogin($scope.user);
}

的WebAPI。

[Route("api/user/login")]
    public void Post([FromBody]LoginVM model)
    {
        if(ModelState.IsValid)
        {

        }
        else
        {

        }
    }

但是当我调试WebAPI模型时,它将所有值都设置为null。

我的初始LoginVM类

   [Serializable]
   public class LoginVM 
   {
   [Required]
    public string Username { get; set; }
    [Required]
    public string Password { get; set; }
   }

以下两次更新修复了我的问题。

1

   //[Serializable] removed this attribute
   public class LoginVM 
   {
   [Required]
    public string Username { get; set; }
    [Required]
    public string Password { get; set; }
   }

2

 $http(
   {
       url: "/api/user/login",
       method: "POST",
       data:  user , // directly passed user object to API
       contentType: "application/json"
   })

我试图了解如何使用[Serializable]属性和&amp ;;来装饰一个类。直接传递对象有所不同??

如果我需要传递多个参数,那么我将如何传递?

1 个答案:

答案 0 :(得分:1)

原因是Web Api会处理Serializable属性here

  

Json.NET现在检测具有Seri​​alizableAttribute和的类型   序列化该类型的所有字段,包括公共和私有,以及   忽略属性。当你感兴趣时,这很有用   对类型上的数据进行往返,并不关心JSON的外观   等。

如果您需要保留Serializable属性,则可以使用普通JsonObject属性修饰模型:

[Serializable]
[JsonObject]
public class LoginVM 
{
    [Required]
    public string Username { get; set; }
    [Required]
    public string Password { get; set; }
}