2012-08-28 5 views
3

이의 우리가 이와 유사한 몇 가지 코드가 있다고 가정하자 : 제목 모두의 맥락에서경우 InvalidOperationException이

[XmlRoot("class-a")] 
public class ClassA 
{ 
    [XmlElement("variable")] // without this everything works fine 
    public ClassB<Type1, Type2> Variable; 

    public ClassA() 
    { 
     new XmlSerializer(typeof(ClassA)); // exception occurs here 
    } 
} 

public class ClassB<TKey, TValue> 
    : NonSerializableClassC<TKey, TValue>, IXmlSerializable 
{ 
    // irrelevant stuff 
} 

꽤 자기 설명이다.

XmlSerialization의 내부가 성능상의 문제로 인해 완전히 다른 .NET CF [3.5]입니다. 동일한 코드가 .NET 데스크톱 버전에서 완벽하게 작동합니다 [4.0]. 또한 XmlElementAttribute를 요소 별칭에만 사용하므로 변수 자체의 이름을 바꾸면 쉽게 도달 할 수 있으므로 문제는 실제로 내 작업에 영향을 미치지 않습니다. 그러나 그것은 실제 해결책이 아닙니다.

그래서 ... 어떤 아이디어가 효과가 있습니까?


스택 트레이스의

마지막 항목 :

// . . . 
System.Xml.dll!System.Xml.Serialization.XmlSerializer.XmlSerializer(System.Type type = {Name = "ClassA" FullName = "RandomProject.ClassA"}) 
System.Xml.dll!System.Xml.Serialization.XmlSerializer.XmlSerializer(System.Type type = {Name = "ClassA" FullName = "RandomProject.ClassA"}, System.Xml.Serialization.XmlAttributeOverrides overrides = null, System.Type[] extraTypes = null, System.Xml.Serialization.XmlRootAttribute root = null, string defaultNamespace = null) 
System.Xml.dll!System.Xml.Serialization.XmlSerializer.findTypeByType(System.Type type = {Name = "ClassA" FullName = "RandomProject.ClassA"}, string defaultNamespace = null) 
System.Xml.dll!System.Xml.Serialization.XmlSerializationReflector.FindType(System.Type type = {Name = "ClassA" FullName = "RandomProject.ClassA"}, bool encoded = false, string defaultNamespace = null, bool searchIntrinsics = true) 
System.Xml.dll!System.Xml.Serialization.XmlSerializationReflector.AddType(System.Type type = {Name = "ClassA" FullName = "RandomProject.ClassA"}, bool encoded = false, string defaultNS = null, bool genericNullableArg = false) 

UPD1 : 그런데, 내가 XmlTypeAttribute/XmlRootAttribute를가 ClassB가 선언 위에 추가하는 경우 - 같은 예외 같은 장소에서 발생합니다.

+0

나는 당신을 위해 대답을하지 않지만, Google은 내가 아는 –

+0

:-(이 현상을 발생 유일 아니지만이 정확한 문제가 어디 언급되지 않았 음을 밝혀와 전혀 링크는 우리에게 가장 사랑하는 사람을 이끌었습니다 :) –

답변

1

시도해 볼 수 있습니다.

public class ClassB<TKey, TValue> 
    : NonSerializableClassC<TKey, TValue>, IXmlSerializable 
where TKey : IXmlSerializable 
where TValue : IXmlSerializable 
+0

감사합니다 RegDwight –

관련 문제