序列化具有相同名称但不同命名空间的类型

Him*_*ere 5 c# namespaces xml-serialization

I\xc2\xb4m 使用 SGen 为程序集中的类型创建 XmlSerilaization 程序集。以下是该程序集的简化代码示例:

\n\n
namespace ConsoleApplication1\n{\n    public class Program\n    {\n        public MyNS2.Flurstueck Flurstueck = new MyNS2.Flurstueck();\n    }\n}\n\nnamespace ConsoleApplication1.MyNS1\n{\n    [XmlRoot("Flurstueck1")]\n    public class Flurstueck\n    {\n        public string kz1 = "kz1";\n    }\n}\nnamespace ConsoleApplication1.MyNS2\n{\n    [XmlRoot("Flurstueck2")]\n    public class Flurstueck\n    {\n        public string kz2 = "kz2";\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我使用该项目进行编译并启用序列化程序集的创建时,我收到“反映类型 ConsoleApplication1.MySN1.Flurstueck 时出错”。显然我们这里有命名冲突,因为类MyNS1.FlurstueckMyNS2.Flurstueck具有相同的名称。这当然可以编译,因为两种类型都有不同的命名空间。创建序列化程序集时失败。

\n\n

但是,当我手动将该类型序列化到文件中并再次反序列化它(因此无需创建序列化程序集并让序列化及时发生)时,它会起作用:

\n\n
XmlSerializer ser = new XmlSerializer(typeof(Program));\nusing (TextWriter writer = new StreamWriter(path))\n{\n    ser.Serialize(writer, new Program());\n}\n\nusing (TextReader reader = new StreamReader(path))\n{\n    var o = ser.Deserialize(reader);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我怎样才能让它与 Sgen 一起工作?当然,我可以将类型重命名为不同的类型,但我想知道为什么 Sgen 不能解析类型,而XmlSerializer可以。

\n