c# - 附加而不是覆盖 Web API 列表

标签 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"]}

在我的 Controller 中

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

        Debug.WriteLine(example.MyList);
    }

输出是:

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

我预计:

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

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

最佳答案

几个月前我遇到了同样的行为。我得出的结论是,当 WebAPI 服务收到带有一些数据的 POST 请求时,它将:

  1. 调用类型构造器实例化一个新的C#对象对应POST请求。
  2. 将 POST 请求中的数据添加(而不是覆盖)到这个新对象的列表中。

我知道,您可能可以从结果中推断出这一点,并且您很好地说明了这一点。

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

关于c# - 附加而不是覆盖 Web API 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31035950/

相关文章:

c# - 从列表中选择<T>

c# - 在 Windows 10 中检测到布局循环,但在 Windows 8.1 中未检测到

c# - xaml 没有看到我的 ivalueconverter

c# - 如何对 ArrayList(int) 进行排序

java - Java中对象在内存中的字段和值遍历

javascript - 从 JSON 对象中删除元素

c# - 我如何在 namedPipeWrapper 中在服务器和客户端之间推送消息?

c# - 在 C# 中将字符串拆分为 char 并在其后添加 "......"

.net - 从字符串 "-1"到类型 'Integer' 的转换无效,但字符串值是有效的 int

iphone - 使用 Asihttprequest 和 iphone 的 Json 框架解析 JSON 数据