반응형
ExpandoObject에 동적으로 속성 추가
런타임에 ExpandoObject에 속성을 동적으로 추가하고 싶습니다. 예를 들어 NewProp이라는 문자열 속성 호출을 추가하려면 다음과 같이 작성하고 싶습니다.
var x = new ExpandoObject();
x.AddProperty("NewProp", System.String);
이것은 쉽게 가능합니까?
dynamic x = new ExpandoObject();
x.NewProp = string.Empty;
또는
var x = new ExpandoObject() as IDictionary<string, Object>;
x.Add("NewProp", string.Empty);
으로는 필립에 의해 여기에서 설명 - http://www.filipekberg.se/2011/10/02/adding-properties-and-methods-to-an-expandoobject-dynamicly/
런타임에도 메소드를 추가 할 수 있습니다.
x.Add("Shout", new Action(() => { Console.WriteLine("Hellooo!!!"); }));
x.Shout();
다음은 Object를 변환하고 주어진 객체의 모든 public 속성을 가진 Expando를 반환하는 샘플 헬퍼 클래스입니다.
public static class dynamicHelper
{
public static ExpandoObject convertToExpando(object obj)
{
//Get Properties Using Reflections
BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
PropertyInfo[] properties = obj.GetType().GetProperties(flags);
//Add Them to a new Expando
ExpandoObject expando = new ExpandoObject();
foreach (PropertyInfo property in properties)
{
AddProperty(expando, property.Name, property.GetValue(obj));
}
return expando;
}
public static void AddProperty(ExpandoObject expando, string propertyName, object propertyValue)
{
//Take use of the IDictionary implementation
var expandoDict = expando as IDictionary;
if (expandoDict.ContainsKey(propertyName))
expandoDict[propertyName] = propertyValue;
else
expandoDict.Add(propertyName, propertyValue);
}
}
용법:
//Create Dynamic Object
dynamic expandoObj= dynamicHelper.convertToExpando(myObject);
//Add Custom Properties
dynamicHelper.AddProperty(expandoObj, "dynamicKey", "Some Value");
참고 URL : https://stackoverflow.com/questions/4938397/dynamically-adding-properties-to-an-expandoobject
반응형
'IT story' 카테고리의 다른 글
dex를 실행할 수 없음 : Eclipse에서 GC 오버 헤드 한계를 초과했습니다. (0) | 2020.04.29 |
---|---|
폴더 자체없이 GitHub 리포지토리의 내용 복제 (0) | 2020.04.29 |
갈퀴 작업에서 일찍 돌아 오려면 어떻게해야합니까? (0) | 2020.04.29 |
UNIX에서 디렉토리 만 나열 (0) | 2020.04.29 |
LINQ를 사용한 여러 주문 방법 (0) | 2020.04.29 |