C# 动态设置JsonProperty PropertyName
我正在开发一些WebAPI,必须返回带有2个标准服务字段和一个包含数组的字段的HttpResponseMessage。大概是这样的:C# 动态设置JsonProperty PropertyName,c#,json,asp.net-web-api,C#,Json,Asp.net Web Api,我正在开发一些WebAPI,必须返回带有2个标准服务字段和一个包含数组的字段的HttpResponseMessage。大概是这样的: { field1:"test", field2:123, array:[{},{}] } 但实际上,我需要几个响应,它们应该只在数组属性的名称上有所不同: { field1:"test", field2:123, someArray:[{},{}] } and { field1:"test", field2:123, some
{
field1:"test",
field2:123,
array:[{},{}]
}
但实际上,我需要几个响应,它们应该只在数组属性的名称上有所不同:
{
field1:"test",
field2:123,
someArray:[{},{}]
}
and
{
field1:"test",
field2:123,
someOtherArray:[{},{}]
}
数组中元素的类型在每个响应中都是相同的。所以我想为这种类型的响应创建一个类,只需更改其PropertyName即可。像这个:
public class Response
{
public int field2 { get; set; }
public string field1 { get; set; }
[JsonProperty(PropertyName = ???)]
public IEnumerable<SomeType> Array { get; set; }
}
公共类响应
{
公共int字段2{get;set;}
公共字符串字段1{get;set;}
[JsonProperty(PropertyName=???)]
公共IEnumerable数组{get;set;}
}
我如何实现它你也可以考虑使用字典。
[HttpGet, Route("api/yourroute")]
public IHttpActionResult GetSomeData()
{
try
{
var data = new Dictionary<string, dynamic>();
data.Add("field1", "test");
data.Add("field2", 123);
var fieldName = someCondition == true? "someArray" : "someOtherArray";
data.Add(fieldName, yourArray);
return Ok(data);
}
catch
{
return InternalServerError();
}
}
[HttpGet,路由(“api/yourroute”)]
公共IHttpActionResult GetSomeData()
{
尝试
{
var data=newdictionary();
数据。添加(“字段1”、“测试”);
数据。添加(“字段2”,123);
var fieldName=someCondition==true?“someArray”:“someOtherArray”;
data.Add(字段名、数组);
返回Ok(数据);
}
抓住
{
返回InternalServerError();
}
}
如果仅从API返回数据,则可以使用匿名对象。如果还需要将其发送回,请将数组属性更改为动态,并使用jObject将字段返回。但我不需要动态属性,数组属性的类型不会更改。只有返回对象中的json名称可以更改。由于灵活性、默认值、文档等原因,我不想使用匿名对象。谢谢您的帮助,但实际上有两个以上的响应,我不想在每个方法中都切换。理想情况下,它应该是通过smth实现的,比如:Request.CreateResponse(HttpStatusCode.OK,newresponse(“test”,123,myArray,“someArray”);然后,您需要实现自己的合同解析器。查看此帖子: