Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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# System.Text.Json-->;每次调用仅序列化特定字段_C#_Json_.net Core_System.text.json - Fatal编程技术网

C# System.Text.Json-->;每次调用仅序列化特定字段

C# System.Text.Json-->;每次调用仅序列化特定字段,c#,json,.net-core,system.text.json,C#,Json,.net Core,System.text.json,在.NET Core 3 web API中,我想序列化具有许多属性的对象。根据调用方的权限,我希望显示或隐藏特定属性。现在,我只使用[JsonIgnore]属性。对于通常不希望序列化的属性,这是很好的 但是是否有类似于[JsonIgnore(context=>context.CheckUserPermissions())]的东西?或者我可以在API方法中添加一些东西 我当前的代码非常简单: [HttpGet(“PickingZoneLists/{pickingZone}”)] 公共异步任务Get

在.NET Core 3 web API中,我想序列化具有许多属性的对象。根据调用方的权限,我希望显示或隐藏特定属性。现在,我只使用
[JsonIgnore]
属性。对于通常不希望序列化的属性,这是很好的

但是是否有类似于
[JsonIgnore(context=>context.CheckUserPermissions())]
的东西?或者我可以在API方法中添加一些东西

我当前的代码非常简单:

[HttpGet(“PickingZoneLists/{pickingZone}”)]
公共异步任务GetData(字符串选取区域){
//获取数据
dsyWorkOrder[]工作订单;
试一试{
工作顺序=等待获取分拣文件列表(分拣区);
}捕获(例外情况除外){
返回问题(“无法收集数据。”+ex.Message);
}
//验证结果
如果(工作顺序==null)
返回问题(“服务返回无效数据”);
如果(workOrders.Length==0)
返回NotFound();
//转换数据
PickingListEntry[]结果;
试一试{
结果=从ServiceResponse(workOrders).ToArray()中选取ListEntry;
}捕获(例外情况除外){
返回问题(“数据无法转换。”+ex.Message);
}

//可能在这里将过滤器应用于PickingListEntry我认为最好的方法是为每个安全级别/角色指定专用的dto类型

这样可以确保您永远不会透露不打算透露的信息

如果您希望使用单一类型,可以创建一个方法,使所有不需要的属性都为null,然后使用
JsonIgnoreCondition序列化此对象。当编写null
时,这仍然是安全的。因为如果seraliser配置不正确,您只会公开字段的名称,而不是它们的值

var options = new JsonSerializerOptions
{
    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
};

请分享您的代码和可复制的示例您正在寻找的是“条件序列化”;大多数序列化程序都支持这种开箱即用的方法,通常是如果您有一个名为
Foo
的属性,您只需添加一个方法
bool ShouldSerializeFoo(){…}
(有时该方法需要是
public
——例如
XmlSerializer
)然后返回
true
false
,这取决于您是否希望包含它。在这种情况下,这是否有效?我不认为
System.Text.Json
支持
应该序列化…
@PavelAnikhouski我有偏见,但如果我正在编写/维护序列化程序(cough,我有),我会在“核心/最低功能”桶,或至少是“B批”feature@MarcGravell忽略属性有一个特殊的部分。它不允许您基于运行时评估的任意条件忽略选定的属性。我想OP正是想要这个选项。当然,您可以尝试通过创建