[英]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 時忽略它。 我通過以下步驟實現了這一點。
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.