簡體   English   中英

使用動態關鍵字將后期綁定信息添加到C#中的對象?

[英]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.

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