MSDN 提供了一个很好的示例,说明如何使 XmlSerializer 类忽略要序列化的类中的属性:http: //msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlignore.aspx
我正在使用 XmlSerializer 类来序列化从 EntityObject 类继承的对象数组,并且我希望 XmlSerializer 忽略 EntityKey 属性。我编写了以下代码:
private void setupXmlSerializer()
{
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attributesToOverride = new XmlAttributes();
attributesToOverride.XmlIgnore = true;
overrides.Add(typeof(MyEntityObject), "EntityKey", attributesToOverride);
completeXmlSerializer = new XmlSerializer(typeof(MyEntityObject[]), overrides);
}
但是,当我运行我的代码时,我得到了与添加代码以忽略 EntityKey 之前相同的结果。我需要做什么才能使 XmlSerializer 忽略要序列化的数组中每个对象的 EntityKey?
编辑:为了回应我收到的答案,我尝试编写以下代码:
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attributesToOverride = new XmlAttributes();
attributesToOverride.XmlIgnore = true;
attributesToOverride.XmlArrayItems.Add(new XmlArrayItemAttribute("EntityKey", typeof(MyEntityObject[])));
overrides.Add(typeof(MyEntityObject), attributesToOverride);
completeXmlSerializer = new XmlSerializer(typeof(MyEntityObject[]), overrides);
当我运行这段代码时,我得到一个异常:XmlRoot and XmlType attributes may not be specified for the type MyNamespace.MyEntityType
再次编辑:我编写了以下代码,它可以运行,但不会忽略 EntityKey。我想知道这是否与实体框架设计类的方式有关。
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attributesToOverride = new XmlAttributes();
attributesToOverride.XmlArrayItems.Add(new XmlArrayItemAttribute("EntityKey", typeof(EntityType[])));
attributesToOverride.XmlIgnore = true;
overrides.Add(typeof(EntityType), "EntityKey", attributesToOverride);
completeXmlSerializer = new XmlSerializer(typeof(EntityType[]), overrides);
编辑:我不知道这是否相关,但 EntityKey 属性是在 EntityObject 抽象类中声明的,具有以下属性:
[DataMember]
[Browsable(false)]
public EntityKey EntityKey { get; set; }
还有一个名为 EntityState 的第二个属性是用 XmlIgnore 声明的,所以我没有遇到不得不忽略它的问题。
[XmlIgnore]
[Browsable(false)]
public EntityState EntityState { get; }
编辑:我发现了。如果我尝试忽略 EntityObject 上的实际数据属性之一,它可以正常工作。我想知道它是否与使用属性声明 EntityKey 或它是复杂类型而其他属性是原始类型有关。