我正在使用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.Flurstueck
和MyNS2.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
可以解析类型时使用。