2011-11-24 2 views
1

나는 내 손에 약간의 지식이있어 잘하면 도움을 줄 수 있습니다.Silverlight 5의 XML 직렬화

저는 Silverlight 4에서 클라이언트 용 Silverlight 응용 프로그램을 개발해 왔습니다. 그러나 전체 화면 모드를 허용하려면 단추가 있어야한다는 것이 분명해졌습니다. 이것은 훌륭하고 멋쟁이 였지만, 전체 화면 모드에서 Silverlight 4는 보안상의 이유로 키보드 입력의 대부분을 사용할 수 없게 만들었으므로 ChildWindowForms에 데이터를 입력하는 것이 전체 화면으로 이어지는 이유는 더 쉽게 무의미 해졌습니다.

Dynamics CRM 2011에 앉아서 컨텍스트 및 기록 ID를 가져야하므로 브라우저에서이 응용 프로그램을 만들 수 없다는 것을 지적해야합니다.

이렇게 실버 라이트 5로 내 forray 시작했다.이 버전은 응용 프로그램이 높은 신뢰 모드에서 브라우저에서 실행할 수 있습니다. 이전에는 브라우저 외부 모드로만 사용할 수있었습니다.

모두 훌륭 했어요. 내 코드에 서명하고, 일부 레지스트리 키와 사용자를 추가하여 신뢰할 수있는 게시자에게 인증서를 추가하고 작동하도록 할 필요가 있다는 것을 알았습니다. 굉장해. 이 시점에서

There is an error in XML document (1, 41). ---> System.TypeAccessException: 
Attempt by security transparent method to access security critical type failed. 

현명한 변경된 코드를 가지고 모든 것을 내가 인증서로 내 프로젝트에 서명했다되었다 : 난 내 응용 프로그램을 실행하려고하고 내가 예외 같이 왔을 때

내 문제는 일어났다.

그것은 실버 라이트 5 그것은 "신뢰"나는 어떤 XML 구성에서 읽고 몇 가지가 보인다 파고 후 .NET 개체에

를 역 직렬화하기 위해 사용하고있어 XmlSerializer 개체를하지 않는 것으로 보인다는 새로운 시리얼을 프로그래머 마을에서 Silverlight 5, DataContractSerializer을 위해 이렇게 나는 위대하다고 생각한다. 나는 순차 화 코드의 일부를 버리고 괜찮을 것이다. 슬프게도 그런 경우는 아닙니다.

이 버전에서는이 버전의 직렬 변환기가 33 % 빠릅니다. XML의 모든 노드는 사전 순이어야합니다. 이것들이이 순서가 아닌 경우는, null로서 읽어 내집니다. (그들은 올바른 위치에있을 경우 그들은 올바르게 읽을 수 있습니다.)

내 질문은 이것입니다. 이 새로운 Serialzer에 맞게 모든 XML 구성 파일을 사전 순으로 재구성하거나 이전 XML serializer를 사용하고 Silverlight 5에서이를 신뢰하는 방법이 있습니까?

답변

1

우선 DataContractSeriailiser는 이전에 Silverlight 5에 새로 추가 된 기능이 아닙니다.

노드가 사전 순으로 나열되어 있습니다. 기본값으로 생각됩니다. 직렬화되는 각 속성에 연결할 수있는 DataMemberAttributeOrder 속성을 사용하여 표시되는 순서를 지정하는 데 사용할 수 있습니다.

+0

따라서 알파벳은 사전 순인지 여부에 관계없이 정의 된 순서 여야합니까? 노드가 그 레벨에 존재한다면 그것은 일치 할 수 없습니다. – Chris

+0

@Chris : 예, 그것이 작동하는 것처럼 보입니다. 나는 간단한 데이터 계약을 생성하고 두 개의 동일한 클래스에 적용했다. 두 클래스의 유일한 차이점은'DataMember' 속성의'Order' 속성 값입니다. 그들은 서로 제대로 상호 작용하지 않습니다. 'Order' 값을 (실제 순서가 적용되는 것과 관계없이) 서로 정렬 시키면 모든 것이 잘 동작합니다. 흥미롭게도'DataContractJsonSerilizer'는 불일치 한 주문에 문제가있는 것으로 보이지 않습니다 (여러분을 돕는 것은 아닙니다).그 앤서니 덕분에 – AnthonyWJones

+0

주셔서 감사합니다, 나는 XML을 재정렬하거나 계약 멤버 주문을 정의하는 것이 유일한 옵션이라고 생각합니다. 장기적으로 더 쉽게 될 운동을 지금! – Chris