gpt4 book ai didi

c# - 接口(interface)的 XML 序列化

转载 作者:太空宇宙 更新时间:2023-11-03 16:51:07 25 4
gpt4 key购买 nike

我在 nHibernate 项目中工作时遇到问题,该项目具有以下对象:

[Serializable]
public class Prototype
{
public virtual long Id { get; private set; }
public virtual string Name { get; set; }
public virtual IList<AttributeGroup> AttributeGroups { get; private set; }
}

我创建了一个反序列化 XML 文件的方法,并将其放入 Prototype 类型的对象中,如下所示:

public static T Deserialize(string fileName)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
XmlTextReader xmlTextReader = new XmlTextReader(fileName);
Object c = xmlSerializer.Deserialize(xmlTextReader);
return (T)c;
}

现在的问题是我有以下异常:

Unable to cast object of type 'NHibernate.Collection.Generic.PersistentGenericBag`1[BCatalog.Entities.AttributeGroup]' to type 'System.Collections.Generic.List`1[BCatalog.Entities.AttributeGroup]'.

由于 nHibernate,我无法更改 IList 的类型,我想反序列化该对象。

我应该怎么做才能解决这个问题?

最佳答案

接口(interface)对于序列化/反序列化过程来说似乎很麻烦。您可能需要向使用具体类型的类添加另一个公共(public)成员,并将接口(interface)属性标记为 xml 忽略。这样您就可以反序列化对象而不会丢失您的契约(Contract)基础。

类似下面的内容:

[Serializable]
public class Prototype
{
public virtual long Id { get; private set; }
public virtual string Name { get; set; }
[XMLIgnore]
public virtual IList<AttributeGroup> AttributeGroups {
get { return this.AttributeGroupsList; }
}
public virtual List<AttributeGroup> AttributeGroupsList { get; private set;}
}

有关反序列化属性的更多信息,请查看 XmlAttributes Properties .

问候,

关于c# - 接口(interface)的 XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3960659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com