列表中添加了重复的项目
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;
});
这已经解决了我的问题。
我正在尝试将字符串列表发送到网络 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;
});
这已经解决了我的问题。