XmlSerializer在更新后停止工作
我正在使用XmlSerializer。直到现在,我一直没有遇到任何问题。我将Silverlight从4更新为5,同时还将WCF RIA Services从v1 SP1更新到v1 SP2。现在下面这行给我一个错误。XmlSerializer在更新后停止工作
XmlSerializer s = new XmlSerializer(typeof(MyCustomObject));
的错误是:
System.InvalidOperationException:System.ServiceModel.DomainServices.Client.EntityConflict不能序列化,因为它没有参数的构造函数。
我正在使用的对象(示例中的MyCustomObject)没有任何改变,所以我开始认为它是SL5或新的RIA服务中断我的代码。我没有发现任何重大更改文件或提及可能发生的情况。我不知道为什么它与EntityConflict有问题,因为我没有在我的对象中使用任何实体。
有没有人看到过这样的错误和/或知道如何解决它?
更新!
错误消息在EntityConflict是实体之前所说的最终属性。我认为这有所作为,但它一直在努力。我也想知道为什么序列化程序已经尝试序列化构造函数中的对象?
public static XmlSerializer GetEntityXmlSerializer<TEntity>()
where TEntity : Entity
{
XmlAttributes ignoreAttribute = new XmlAttributes()
{
XmlIgnore = true,
};
// use base class of Entity,
// if you use type of implementation
// you will get the error.
Type entityType = typeof(Entity);
var xmlAttributeOverrides = new XmlAttributeOverrides();
xmlAttributeOverrides.Add(entityType, "EntityConflict", ignoreAttribute);
xmlAttributeOverrides.Add(entityType, "EntityState", ignoreAttribute);
return new XmlSerializer(typeof(TEntity), xmlAttributeOverrides);
}
这可行(在SL5中),我能够序列化我的实体。但是,它并不遵循导航属性并对这些实体进行序列化。 – sparks 2012-08-16 19:02:41
我不确定为什么会出现这种情况,RIA Services实体不是XmlSerializable对象,实体本身也没有用[Serializable]属性修饰。你有没有在客户端添加部分类,用[Serializable]装饰实体或以某种方式修改代码生成?
我以为你解决了这个问题。我喜欢这个类的Serializable属性,但不幸的是删除它并没有解决它。仍然得到相同的错误。 – 2012-02-14 09:11:15
我通过使用我的自定义对象(从实体继承)的副本的中间可序列化POCO对象来解决此问题。 POCO对象没有从实体继承。我刚从原始实体对象更新了它们的值。然后他们很好地序列化。当然,当你反序列化时,你需要从POCO对象中更新实体对象。
同样的问题,当我从SL4更新我的应用程序 - > SL5 – felickz 2012-04-05 15:26:22