2016-09-07 2 views
0

직렬화와 관련된 예외를 throw하는 사용자 지정 제네릭 형식에 심각한 문제가 있습니다. 지금UWP 앱의 제네릭 형식에 대한 런타임 지시문 추가

internal class Foo<T> : IFoo<T> 
{ 
    public void Bar(T tralalala) 
    { 
     //do whatever 
    } 
} 

을 우리는 프리즘 프레임 워크와를 사용하는 내장 된 SessionStateService가 종료 또는 중단됩니다 때 응용 프로그램 상태를 저장하기 위해 예를 들면 다음과 같습니다 클래스입니다. 프리즘은 예외가 발생, 다시 출시 후 응용 프로그램 상태를 돌아 오게하려고 할 때 문제가있다 :

System.Runtime.Serialization.InvalidDataContractException 
SerializationCodeIsMissingForType, Utilities.Foo.Foo`1[T] 

내가 시리얼 위해서는 라이저/디시리얼라이저가 작동하는 것을 잘 알고, 닷넷 네이티브 컴파일러 rd.xml 파일에 표시된대로 유형에 대해 제공되는 추가 메타 데이터가 필요합니다. 문제는 그 유형을 표시하는 방법에 대한 아이디어가 없다는 것입니다. 나는 전체 네임 스페이스에 대한 일반적인 태그가 작동 것이라고 생각 :

<Namespace Name="Utilities.Foo" Dynamic="Required All" DataContractSerializer="Required All" /> 

을하지만 그것은 사실이 아니다, 난 정말 제대로 제네릭 형식을 표시하는 방법의 예를 찾을 수 없습니다. 직렬화/직렬화 해제 문제로 인해 WACK 테스트를 통과 할 수 없기 때문에 문제를 해결해야합니다. 도와주세요, 스택 오버플로, 당신은 나의 유일한 희망이에요.

+1

.NET serializer 팀의 일부 사람들에게 ping했습니다. 우리가 너를 제곱 할 수있을거야. 이와 같은 경우에 항상 [email protected]으로 메일을 보내주십시오. 도와 줄 수있어서 기뻐! –

+0

.NET 기본 도구 체인을 포함하거나 포함하지 않고 앱을 컴파일 할 때 문제가 발생합니까? –

답변

0

<TypeInstantiation> 요소를 사용하여 구성된 정책에 반사 정책을 설정할 수 있습니다. 자세한 내용은 https://msdn.microsoft.com/en-us/library/dn627487(v=vs.110).aspx을 참조하십시오.

예를 들어, 여기 내 테스트 응용 프로그램은 Foo<int>Foo<string> 테스트, 그래서 위와 같이 내가 다른 Arguments 속성 값이 개 TypeInstantiation 항목을했다

<?xml version="1.0" encoding="utf-8" ?> 
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata"> 
    <Application> 
    <Assembly Name="*Application*" Dynamic="Required All" /> 
    <TypeInstantiation Name="Foo" 
         Arguments="System.Int32" 
         DataContractSerializer="Required All" /> 
    <TypeInstantiation Name="Foo" 
         Arguments="System.String" 
         DataContractSerializer="Required All" /> 
    </Application> 
</Directives> 

, 내가 푸 대한했다 rd.xml 파일입니다.

또는 당신은 모든 Foo<T> 유형에 정책을 적용하기 위해 아래의 요소를 사용하여 요소가 Arguments 속성이 없음을

<TypeInstantiation Name="Foo" DataContractSerializer="Required All" /> 

참고.

+0

나는이 문제에 대해 꽤 많은 시간을 보냈기 때문에 몇 가지 추가 컨텍스트를 추가하고 싶습니다. –

+0

그리고 실제로 내 의견을 마치기 전에 보내 주셨습니다. 여기의 사례는 더 복잡했습니다. 우리는 자체적 인 약한 이벤트 패턴 구현을 사용했습니다. 반사가 많지 않습니다. 직렬화를 시도하면 SessionStateService가 엉망이됩니다. UWP Toolkit의 WeakEventListener로 전환 했으므로 이제는 괜찮습니다. 위의 예제는 다른 일반적인 유형에도 도움이되었으므로 감사합니다. –