附加Web API列表而不是覆盖

时间:2015-06-24 20:04:17

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

我有一个带有构造函数的类,如下所示

public SomeClass
{
    List<string> MyList;
    public SomeClass()
    {
        this.MyList = new List<string>() { "1","2","3" };
    }
}

我的ajax帖子如下:

{MyList:["a","b","c"]}

在我拥有的控制器中

public void Post([FromBody]Models.SomeClass example)
    {

        Debug.WriteLine(example.MyList);
    }

输出是:

["1","2","3","a","b","c"]

我期待:

["a","b","c"]

我希望确切地发布了所发布的内容而不是附加了发布值的初始值。不确定这里发生了什么,为什么列表的初始状态没有被覆盖?

1 个答案:

答案 0 :(得分:1)

几个月前我遇到了同样的行为。我总结了发生的事情,因为WebAPI服务收到了带有一些数据的POST请求,它会:

  1. 调用类型构造函数以实例化与POST请求对应的新C#对象。
  2. 将POST请求中的数据添加(不覆盖)到此新对象中的List。
  3. 我知道,你可以从结果中推断出来,你很好地说明了这一点。

    但是我最终要做的是将类型构造函数中的任何初始值设置移出到Factory中,以便我需要设置这些“默认”值。然后当new()作为POST的一部分被调用时,它返回一个空的List,因此从POST添加的值是唯一以该对象结束的值。