我有两个(不同的)C#系统,它们通过XML进行通信。我们已就XML格式达成一致。
我要做的下一件事就是序列化一个类:
public class Parent
{
public IChild Child { get; set; }
public string Name { get; set; }
}
public interface IChild
{
string Name { get; set; }
}
public class Girl:IChild
{
public string Name { get; set; }
public string FavDoll { get; set; }
}
public class Boy : IChild
{
public string Name { get; set; }
public string FavCar { get; set; }
}
使用IXmlSerializer时的结果:
<击> 使用IXmlSerializable时,我得到一个异常,接口IChild(wellwaddayaknow)上没有构造函数。
好的,修好了(感谢@Giedrius)
由于@RobertH
而减少了ns
<Parent>
<Child>
<Boy>
<Name>Bill</Name>
<FavCar>Chevvy</FavCar>
</Boy>
</Child>
</Parent>
使用DataContract时,我得到一个xmlns有一个对命名空间的引用。其他系统中没有。因此,当反序列化时,我得到一个异常,引用就不存在了。
<Parent xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Child xmlns:d2p1="TestConsole, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" i:type="d2p1:TestConsole.Boy">
<FavCar xmlns="http://schemas.datacontract.org/2004/07/TestConsole">Chevvy</FavCar>
<Name xmlns="http://schemas.datacontract.org/2004/07/TestConsole">Bill</Name>
</Child>
</Parent>
我唯一的选择是使用XDocument并生成很多loc?
答案 0 :(得分:1)
根据this question,有几种方法可以解决界面属性问题:
答案 1 :(得分:0)
public class Parent
{
[XmlElement(Type = typeof(Girl))]
[XmlElement(Type = typeof(Boy))]
public IChild Child { get; set; }
}