Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态设置JsonProperty PropertyName_C#_Json_Asp.net Web Api - Fatal编程技术网

C# 动态设置JsonProperty PropertyName

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

我正在开发一些WebAPI,必须返回带有2个标准服务字段和一个包含数组的字段的HttpResponseMessage。大概是这样的:

{
  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”);然后,您需要实现自己的合同解析器。查看此帖子: