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.isEmailEnabled
true로 표시되고 부울이라고 합니다.그러나 위의 접근법을 사용하여 이 값을 얻으려고 시도하고 전달하면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
'programing' 카테고리의 다른 글
vba 버튼 - 클릭한 항목 찾기 (0) | 2023.08.30 |
---|---|
RMariaDB 및 R의 풀을 사용하여 MariaDB로 전송된 여러 JSON 문자열 검사 (0) | 2023.08.30 |
PowerShell을 사용하여 모든 SVN 파일을 재귀적으로 삭제하는 방법 (0) | 2023.08.30 |
Firebug 콘솔에서 Ajax 요청을 숨기는 방법은 무엇입니까? (0) | 2023.08.30 |
Excel에서 차트의 범례 항목을 편집하는 방법은 무엇입니까? (0) | 2023.08.30 |