如何在运行时从类中删除属性

时间:2011-05-05 07:00:05

标签: c# reflection dynamic

是否可以在运行时从类中删除属性,例如:

public Class A
{
  public int num1 {get;set;}
  public int num2 {get;set;}
  public int num3 {get;set;}
}

Class A Obj = new A();

在运行时,我想从num2中删除obj。有可能吗?

6 个答案:

答案 0 :(得分:9)

这不可能。编译完成后,就会设置一个类定义。

答案 1 :(得分:1)

正如其他人所说,这是不可能的。

相反,您可以添加其他属性,例如

public List<string> ignoredProperties {get; set;}

然后在运行时将num2添加到该列表并检查它应该忽略的属性。

答案 2 :(得分:0)

你必须采用Model / ViewModel方法。创建一个ViewModel,它将满足您的需求。

答案 3 :(得分:0)

我同意Nic的回复:这是不可能做到的。编译完成后,就会设置一个类定义。

但是你可以通过反射动态地创建一个类属性。

答案 4 :(得分:0)

我的情况要容易得多

我有一个 POST 类
然后我需要删除一些属性并将其保存到 JSON
我确实使用了 System.Dynamic.ExpandoObject 复制了类

            Object value;
            
            System.Dynamic.ExpandoObject cloneData = JsonSerializer.Deserialize<ExpandoObject>(JsonSerializer.Serialize(data));
           
            cloneData.Remove("IP", out value);
            value = value;
            cloneData.Remove("analytics", out value);
            value = value;


            string azurecontainer = @"data";
            string azureblobJSONDataFilename = @"profile/" + _userInfoSessionB.u + @".json";
            string JSONData = JsonSerializer.Serialize(cloneData);
            object p = azureStorage.UploadBlob2ContainerTextAsync(JSONData, azurecontainer, azureblobJSONDataFilename, "application/json", "public, max-age=30");

答案 5 :(得分:0)

我无法删除该属性,我试图创建一个动态 JSON,将 2 个不同的类合并在一起但没有一些属性(该合并类不需要),所以我所做的是,我添加了一个自定义属性并添加到我不需要的字段/属性中,并在合并 2 个类后使用反射在运行时创建自定义 JSON。