2011-05-13 6 views
0
한 프로젝트에서

, 나는 같은 xmlxx 코드에서 DataMember 이름을 가져올 수 있습니까?

XML 클라이언트에 클래스를 serialize하기 위해 datamember를 사용합니다. 다음과 같이 하나의 값을 얻으려면 XML 쿼리 :

XmlNode1.SelectSingleNode("Member1"); 

위의 Member1를 변수로 만들면 DataMember 이름을 Member2로 변경하면 쿼리의 Member1Member2로 자동 변경 될 수 있습니다. 수동으로 변경하지 마십시오.

답변

1

나는 당신이 달성하기를 원하는 것을 이해하고 있지는 않지만, 직렬화의 출력을 중앙에서 제어 할 수 있기를 원한다면 public static 클래스에서 태그를 정의 할 수있다.

static class SerializationConstants 
{ 
    public static string MemberTag = "Member1"; //or "Member2" 
} 

그런 다음 datamember에서 이름 속성과 함께 속성을 사용할 수 있습니다. 직렬화를 제어 할

[DataMember(Name=SerializationConstants.MemberTag) 
public string Member1; 

는 XML을 쿼리하는 코드에서, 당신은 같은 것을 할 수있는 :

XmlNode1.SelectSingleNode(SerializationConstants.MemberTag) 

을이 해킹 될 것이다하지만 난 당신의 질문을 이해한다면이해야 할 것 같아요 바르게.

+0

이것은 MemberTag const를 만들 때 작동 할 수 있습니다. 다른 쉬운 방법이 없다면 이것을 대답으로 생각합니다 ... –

0

XML 파일을 작업 할 때이를 직렬화 해제해야합니다. 그런 다음 필드 이름을 사용하여 속성에 액세스 할 수 있으며 리팩토링을 수행하면 XML 파일이 변경됩니다.

+0

제안 해 주셔서 감사합니다. 직렬화 해제는 그것을 수행 할 수 있습니다. 단지 제 상황에서는 하나의 값만 필요합니다. 그러나 조회가 전체 클래스를 직렬화 해제합니다. 작은 값을 얻기에는 너무 많은가요? –

0

이것은 좋은 생각 같지 않습니다.

DataMember 특성을 사용하여 클래스에서 속성 이름이 변경되는 것이 염려되는 경우 해당 클래스와 XML 쿼리 사이에 DTO 형식으로 추상화 계층이 필요할 것입니다. 그렇게하면 XML 질의 클래스는 DTO가 절대로 바뀌지 않기 때문에 회원 이름이 바뀌어도 상관 없습니다. DTO에서 volitle 클래스로의 매핑.

+0

DTO는 데이터 전송 객체입니까? 나는 http://msdn.microsoft.com/en-us/library/ms978717.aspx를 읽었다. ... 내 문제와 관련해서는 꽤 복잡해 보인다 ... –

+0

결코 변경되지 않는 클래스를 유지 관리 할 수있다. datamember 속성이 변경된 클래스가 많이 변경되면 원하는 데이터가있는 클래스와 항상 필요한 데이터가있는 DTO 객체의 매핑 만 변경하면됩니다. 그렇게하면 매핑 외부에서 코드를 변경할 필요가 없습니다. –

관련 문제