[英]Adding late-bound information to an object in C#, using dynamic keyword?
我有一個對象,在將其序列化為Json之前,我想為其添加一個屬性。 所以我的對象看起來像這樣:
public class MySpecialObject {
public int Id { get; set; }
public string OneProperty { get; set; }
public string ASecondProperty { get; set; }
}
但是,在程序的后面,我經常要添加一兩個屬性。 這通常發生在我的控制器中,就在將其轉換為Json之前。 我想做這樣的事情:
///Retrieve object from database
var MySpecialObject = specialObjectRepository.Get(id);
MySpecialObject.["DynamicProperty"] = "Dynamic Property!";
///Pretend I do Json serialization here
return MySpecialObject;
這顯然是彌補的,但是我希望我想做的清楚。 在Javascript中,這是很容易做到的,因為它是松散鍵入的。 我以為在C#4.0中使用dynamic關鍵字是可行的,但看起來這不是它的目的(盡管我可能會完全忽略明顯的東西)。 我想我可以為這類情況創建一個類,但只一行編寫起來會更容易。 我知道這聽起來很懶,但是感覺到我想要做的事情應該是可能的。
您想從ExpandoObject繼承。 它為動態對象實現了所有必要的填充。
您必須使用新的ExpandoObject類:
public class MySpecialObject:ExpandoObject {
public int Id { get; set; }
public string OneProperty { get; set; }
public string ASecondProperty { get; set; }
}
並且,在序列化之前,只需編寫:
var MySpecialObject = specialObjectRepository.Get(id);
MySpecialObject.DynamicProperty = "Dynamic Property!";
您不僅限於添加新屬性,還可以添加新方法和新事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.