列表中添加了重复的项目

Duplicate item getting added in list

我正在尝试将字符串列表发送到网络 api,这个列表我正在 class 构造函数中初始化,同样 class 我正在传递到网络 api .

当我初始化 class;列表已正确填充,但在将其发送到网络后 api 相同的项目再次添加到列表中。不确定为什么会这样。

因为我接受了客户的这些价值观;如果客户端没有提供任何值,那么我想将默认值填充到列表中。

下面是我的代码

public class RequestDto
    {
        public RequestDto()
        {
            TypeNames = new List<string>();
            TypeNames.Add(new string("Type1"));
            TypeNames.Add(new string("Type2"));
            TypeNames.Add(new string("Type3"));

        }

        public string CompanyName { get; set; }
        public string Version { get; set; }
        public List<string> TypeNames { get; set; }
    }

然后我将 class 传递给网络 api,如下所示

using (var client = new HttpClient())
            {
                string url = "some url";

                var postTask = client.PostAsJsonAsync(url, objrequestdto);
                postTask.Wait();

                if (postTask.Result.IsSuccessStatusCode)
                {
                    // Do Something
                }
            }

下面是我的api,在收到参数后我可以看到项目再次被添加。

[HttpPost]
        public IActionResult GetTypeDetails([FromBody] RequestDto requestdto) // Here I am getting duplicate/Repeated Values
        {
            try
            {
                // Some logic

            }
            catch (Exception e)
            {
                Log.Error("Some Error");
                return StatusCode(500, e.Message);
            }
        }

这就是我在调用 Web api 之前填充 RequestDto class 的方式 api。

编辑 1:

RequestDto objrequestdto = GetConfigurations(configName);

private RequestDto GetConfigurations(string configName)
        {

            RequestDto requestdto = new RequestDto();

            /// Add configurations here.

            return requestdto;
        }

因此,我在 Web 中收到重复记录 API。

感谢任何帮助!

这是因为您要在构造函数中添加值。

您正在使用默认构造函数来添加默认值,Serializer 也使用它。 Serializer 将首先调用您的默认构造函数,然后它将填充 JSON.

中的项目

为防止重复,您可以使用 ISet<> 而不是 List<>

public class RequestDto
{
    public RequestDto()
    {
        TypeNames = new HashSet<string>();
        TypeNames.Add(new string("Type1"));
        TypeNames.Add(new string("Type2"));
        TypeNames.Add(new string("Type3"));
    }

    public string CompanyName { get; set; }
    public string Version { get; set; }
    public ISet<string> TypeNames { get; set; }
}

如果有人在寻找答案,我已通过在 Web API 项目的 Startup.cs 文件中添加以下 json 格式来解决此问题。

services.AddMvc().AddJsonOptions(options =>
            {
                options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
                options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
                options.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local;
                options.SerializerSettings.ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace;
            });

这已经解决了我的问题。