簡體   English   中英

如何在運行時從 class 中刪除屬性

[英]How to remove a property from class at run time

是否可以在運行時從 class 中刪除一個屬性,例如:

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

Class A Obj = new A();

在運行時,我想從obj中刪除num2 是否可以?

這是做不到的。 編譯后,將設置 class 定義。

正如其他人已經說過的那樣,這是不可能的。

相反,您可以添加另一個屬性,例如

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

然后在運行時將num2添加到該列表並檢查您應該忽略的屬性。

你必須想出模型/視圖模型的方法。 創建一個 ViewModel,它將根據您的要求具有有限的屬性。

我同意 Nic 的回復:這不能做。 編譯后,將設置 class 定義。

但是您可以通過反射動態創建您想要的 class 屬性。

我的情況要容易得多

我有一個 class 這是 POST
然后我需要刪除一些屬性並將其保存到 JSON
我用System.Dynamic.ExpandoObject做了 go 復制 class

            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");

我無法刪除該屬性,我試圖創建一個動態 JSON,將 2 個不同的類合並在一起,但沒有一些屬性(該合並類不需要),所以我所做的是,我添加了一個自定義屬性並添加了到我不需要的字段/屬性,並在合並 2 個類后使用反射在運行時創建自定義 JSON。

我有一個非常精確的用例。 就我而言,我想在通過 Json 將數據 model 發布到 ODATA 時忽略一些屬性。 此屬性可能不是表字段,因此我想在將其序列化為 JSON 時忽略它。 我通過以下步驟實現了這一點。

  • 我使用 DataAnnotations 將該屬性裝飾為 [ReadOnly(true)]
  • 然后,我從ISerializer創建了一個自定義 JsonSerializer 以忽略 ReadOnly 屬性,如下所示:
public string Serialize(object obj)
{
    return JsonSerializer.Serialize(obj,
           new JsonSerializerOptions
           {
               IgnoreReadOnlyProperties = true
           });
}

這解決了我的問題,即忽略一些我不想通過 Json/OData 調用或任何 Api/端點傳遞的屬性。

//Convert your object to JObject
var jsonDoc = JObject.FromObject(doc);
//Select the Property To Remove
var PropertyToRemove= jsonDoc.Property("PropertyToRemove");
// Remove the Property
sig.Remove();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM