C# Web API 可以反序列化包含字典的 URI 中的对象吗
Can C# Web API Deserialize Object in URI that Contains a Dictionary
我试图在 GET 请求中传递一个复杂的对象。 C# 模型对象如下所示:
public class GetRequest
{
public string ID { get; set; }
public List<string> RequestedFields { get; set; }
public Dictionary<string, List<string>> RequestedGrids { get; set; }
}
查看 Chrome 中的请求,我在 "Query String Parameters" 下看到以下内容:
ID: 1
RequestedFields[]: someTxtField
RequestedFields[]: someOtherField
RequestedGrids[someGrid][]: keyColumn
RequestedGrids[someGrid][]: someDataColumn
我希望这样的请求能够作为以下操作中的参数正确反序列化:
[HttpGet]
[ActionName("get")]
public Dictionary<string,object> GetStuff([FromUri] GetRequest get_req)
但是,每当请求进入此操作时,参数的 RequestedGrids 属性 的计数始终为 0,而其他属性填充正常。有没有办法让这个工作?
加法
进入 JQuery $.get 调用的对象如下所示:
{ ID: p_key, RequestedFields: p_page.dataIds, RequestedGrids: p_page.grids }
其中 RequestedFields 是普通字符串数组,RequestedGrids 是普通对象,其中每个对象 属性 值都是字符串数组。
当您需要发送这么多数据,尤其是复杂数据时,最好将数据作为 POST 请求正文的一部分发送。这样就可以确保结构完全匹配,并且可以轻松转换to/from JSON 格式。
GET 上的输入是什么样的?一般来说,字典类型反序列化有点痛苦 - 详情请参阅 Deserialize JSON string to Dictionary<string,object>...
完成此操作的最简单方法似乎是只传递一个 JSON 查询字符串而不是使用自动绑定。所以动作看起来像这样:
[HttpGet]
[ActionName("get")]
public Dictionary<string, object> GetStuff(string get_str)
{
var get_req = JsonConvert.DeserializeObject<GetRequest>(get_str);
//Do ur stuff
}
JS 看起来像这样:
$.get('<action path>', { get_str: JSON.stringify(get_obj) }, ...
我试图在 GET 请求中传递一个复杂的对象。 C# 模型对象如下所示:
public class GetRequest
{
public string ID { get; set; }
public List<string> RequestedFields { get; set; }
public Dictionary<string, List<string>> RequestedGrids { get; set; }
}
查看 Chrome 中的请求,我在 "Query String Parameters" 下看到以下内容:
ID: 1
RequestedFields[]: someTxtField
RequestedFields[]: someOtherField
RequestedGrids[someGrid][]: keyColumn
RequestedGrids[someGrid][]: someDataColumn
我希望这样的请求能够作为以下操作中的参数正确反序列化:
[HttpGet]
[ActionName("get")]
public Dictionary<string,object> GetStuff([FromUri] GetRequest get_req)
但是,每当请求进入此操作时,参数的 RequestedGrids 属性 的计数始终为 0,而其他属性填充正常。有没有办法让这个工作?
加法
进入 JQuery $.get 调用的对象如下所示:
{ ID: p_key, RequestedFields: p_page.dataIds, RequestedGrids: p_page.grids }
其中 RequestedFields 是普通字符串数组,RequestedGrids 是普通对象,其中每个对象 属性 值都是字符串数组。
当您需要发送这么多数据,尤其是复杂数据时,最好将数据作为 POST 请求正文的一部分发送。这样就可以确保结构完全匹配,并且可以轻松转换to/from JSON 格式。
GET 上的输入是什么样的?一般来说,字典类型反序列化有点痛苦 - 详情请参阅 Deserialize JSON string to Dictionary<string,object>...
完成此操作的最简单方法似乎是只传递一个 JSON 查询字符串而不是使用自动绑定。所以动作看起来像这样:
[HttpGet]
[ActionName("get")]
public Dictionary<string, object> GetStuff(string get_str)
{
var get_req = JsonConvert.DeserializeObject<GetRequest>(get_str);
//Do ur stuff
}
JS 看起来像这样:
$.get('<action path>', { get_str: JSON.stringify(get_obj) }, ...