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

时间:2015-06-12 07:59:09

标签: c# namespaces xml-serialization

我正在使用SGen为我的程序集中的类型创建XmlSerilaization程序集。以下是此程序集的简化代码示例:

namespace ConsoleApplication1
{
    public class Program
    {
        public MyNS2.Flurstueck Flurstueck = new MyNS2.Flurstueck();
    }
}

namespace ConsoleApplication1.MyNS1
{
    [XmlRoot("Flurstueck1")]
    public class Flurstueck
    {
        public string kz1 = "kz1";
    }
}
namespace ConsoleApplication1.MyNS2
{
    [XmlRoot("Flurstueck2")]
    public class Flurstueck
    {
        public string kz2 = "kz2";
    }
}

当我使用并为该项目创建序列化程序程序集时,我得到“反映类型ConsoleApplication1.MySN1.Flurstueck”的错误。显然我们在这里有一个命名冲突,因为类MyNS1.FlurstueckMyNS2.Flurstueck具有相同的名称。这当然会编译,因为两种类型都有不同的命名空间。创建序列化程序 - 程序集时,它会失败。

但是,当我手动将该类型串行化为文件并再次反序列化时(因此无需创建序列化程序组件并让序列化及时发生),它可以正常工作:

XmlSerializer ser = new XmlSerializer(typeof(Program));
using (TextWriter writer = new StreamWriter(path))
{
    ser.Serialize(writer, new Program());
}

using (TextReader reader = new StreamReader(path))
{
    var o = ser.Deserialize(reader);
}

如何让这与Sgen合作?当然我可以将类型重命名为不同,但我想知道为什么Sgen无法在XmlSerializer可以解析类型时使用。

0 个答案:

没有答案