Muh*_*eed 5 asp.net json json.net asp.net-core asp.net-core-1.0
我想在我的API中提供以下JSON:
{
"id": 1
"name": "Muhammad Rehan Saeed",
"phone": "123456789",
"address": {
"address": "Main Street",
"postCode": "AB1 2CD"
}
}
Run Code Online (Sandbox Code Playgroud)
我想赋予客户端过滤掉他们不感兴趣的属性的能力。因此,以下URL返回JSON的子集:
`/api/contact/1?include=name,address.postcode
{
"name": "Muhammad Rehan Saeed",
"address": {
"postCode": "AB1 2CD"
}
}
Run Code Online (Sandbox Code Playgroud)
在ASP.NET Core中实现此功能的最佳方法是什么,以便:
我发现这个解决方案,它使用了自定义JSON.Net ContractResolver。可以通过将合同解析器添加到ASP.Net Core使用的默认合同解析器中来全局应用该合同解析器,也可以将其手动添加到此代码示例之类的单个操作中,而不是添加到控制器中。另外,这是JSON特定的实现。
您可以使用dynamic
withExpandoObject
创建包含所需属性的动态对象。ExpandoObjectdynamic
是关键字在底层使用的对象,它允许在运行时动态添加和删除属性/方法。
[HttpGet("test")]
public IActionResult Test()
{
dynamic person = new System.Dynamic.ExpandoObject();
var personDictionary = (IDictionary<string, object>)person;
personDictionary.Add("Name", "Muhammad Rehan Saeed");
dynamic address = new System.Dynamic.ExpandoObject();
var addressDictionary = (IDictionary<string, object>)address;
addressDictionary.Add("PostCode", "AB1 2CD");
personDictionary.Add("Address", address);
return Json(person);
}
Run Code Online (Sandbox Code Playgroud)
这导致
{"Name":"Muhammad Rehan Saeed","Address":{"PostCode":"AB1 2CD"}}
Run Code Online (Sandbox Code Playgroud)
您只需要创建一个服务/转换器或类似的东西,它将使用反射来循环您的输入类型,并且仅保留您指定的属性。
归档时间: |
|
查看次数: |
1206 次 |
最近记录: |