C# c语言中的动态允许/拒绝属性

C# c语言中的动态允许/拒绝属性,c#,asp.net-mvc,C#,Asp.net Mvc,我使用一个带有属性的视图模型将数据作为JSON传递给java脚本 public string Property1 { get; set; } //deny for user1 public string Property2{ get; set; } //denyfor user2 public string Property3{ get; set; } 现在我有了不同类型的用户,因此根据我想要的用户,我希望denyor允许属性映射并显示在UI上,那么一个检查授权规则并在授权失败时

我使用一个带有属性的视图模型将数据作为JSON传递给java脚本

public string Property1 { get; set; }  //deny for user1
public string Property2{ get; set; }   //denyfor user2
public string Property3{ get; set; }    

现在我有了不同类型的用户,因此根据我想要的用户,我希望denyor允许属性映射并显示在UI上,那么一个检查授权规则并在授权失败时返回null的自定义getter如何?然后可以将序列化程序设置为不序列化空值

JsonSerializer serializer = new JsonSerializer { NullValueHandling = NullValueHandling.Ignore };

private string _property1;
public string Property1 
{ 
    get 
    {
        if(getcurrentuser.isauthorizedforproperty1)
        {
            return _property1;
        }
        else 
        {
            return null;
        }
    }
    set
    {
        _property1 = value;
    }
}

Json.NET允许条件属性序列化,尽管它可能不适合您的场景。您可以克隆原始对象,仅复制允许的属性,然后序列化结果。权限是如何确定的?是的,我找到了JsonIgnore属性,我想我已经根据我的要求对其进行了自定义,对于权限,我有一个权限服务,当提供给用户和模块时,它是必需的还是不必需的。如果我能找到一种自定义JsonIgnore属性的方法,这将是很有帮助的{MethodName}。您可以定义一个复杂的规则,但不能传递参数,并且必须在DTO本身上定义方法。您可以使用自定义类深入自定义序列化的内容。ContractResolver可以复制属性或方法的功能,但确实需要更多的编码。您是对的。确实如此。我将保留t这里是他的示例,以防有人无意中发现此页面使用了其他没有该功能的序列化程序,如MS JavaScriptSerializer。