programing

C# ExpandoObject에서 이름으로 속성을 동적으로 가져오는 방법은 무엇입니까?

skycolor 2023. 8. 30. 21:31
반응형

C# ExpandoObject에서 이름으로 속성을 동적으로 가져오는 방법은 무엇입니까?

나는 있습니다.ExpandoObject그리고 실행 시 이름으로 속성을 반환하는 Getter를 만들고자 합니다. 여기서 이름은 하드코드가 아닌 문자열로 지정됩니다.

예를 들어, 다음과 같은 작업을 수행할 수 있습니다.

account.features.isEmailEnabled;

그리고 그것은 진실로 돌아올 것입니다.account이다.ExpandoObject,그리고.features또한ExpandoObject그래서 저는.ExpandoObject다른 것을 포함하는ExpandoObjects.

그래서 제가 하고 싶은 것은 다음과 같습니다.

account.features.GetProperty("isEmailEnabled");

그리고 그 결과를 진실로 돌려받습니다.

그 이유는 제가 많은 특징을 가지고 있고, 제가 원하는 특징의 이름을 전달할 수 있는 하나의 일반적인 getter 메소드를 쓸 수 있고, 그 메소드는 제게 계정 값을 돌려주기 때문입니다.특징들.임의(여기서 "getter"는 일반적인 getter 메서드에 문자열을 전달하여 지정됨)그렇지 않으면 각 기능에 대해 30개의 추가 정보를 작성해야 합니다.

저는 많은 조사를 했고 다음과 같은 것을 시도했습니다.

var prop = account.features.GetType();  
// this returns System.Dyanmic.ExpandoObject

다음에

var value = prop.GetProperty(featureNameAsString); 

그렇지만value항상 null로 반환됩니다.나는 왜 그런지 이해하지 않아요.시계 창에서 나는 할 수 있습니다.account.features.isEmailEnabledtrue로 표시되고 부울이라고 합니다.그러나 위의 접근법을 사용하여 이 값을 얻으려고 시도하고 전달하면isEmailEnabled처럼featureNameAsString저는 그냥 무효입니다.

누가 제가 잘못하고 있는 것이 무엇인지, 그리고 너무 복잡하지 않게 좋은 접근법이 무엇인지 말씀해 주시겠습니까?

저는 ASP와 함께 일하고 있습니다.4.5.1 프레임워크의 NET.

ExpandoObject를 통해 모두 액세스 제공dynamic경유로IDictionary<string,object>사전 API를 사용할 수 있습니다.

var byName = (IDictionary<string,object>)account.features;
bool val = (bool)byName["isEmailEnabled"];

또는 이름이 고정된 경우 다음과 같이 하십시오.

bool val = ((dynamic)account).features.isEmailEnabled;

언급URL : https://stackoverflow.com/questions/19139417/how-to-dynamically-get-a-property-by-name-from-a-c-sharp-expandoobject

반응형