2012-02-08 161 views
2

我正在使用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是实体之前所说的最终属性。我认为这有所作为,但它一直在努力。我也想知道为什么序列化程序已经尝试序列化构造函数中的对象?

+0

同样的问题,当我从SL4更新我的应用程序 - > SL5 – felickz 2012-04-05 15:26:22

回答

4
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); 
} 
+0

这可行(在SL5中),我能够序列化我的实体。但是,它并不遵循导航属性并对这些实体进行序列化。 – sparks 2012-08-16 19:02:41

0

我不确定为什么会出现这种情况,RIA Services实体不是XmlSerializable对象,实体本身也没有用[Serializable]属性修饰。你有没有在客户端添加部分类,用[Serializable]装饰实体或以某种方式修改代码生成?

+0

我以为你解决了这个问题。我喜欢这个类的Serializable属性,但不幸的是删除它并没有解决它。仍然得到相同的错误。 – 2012-02-14 09:11:15

0

我通过使用我的自定义对象(从实体继承)的副本的中间可序列化POCO对象来解决此问题。 POCO对象没有从实体继承。我刚从原始实体对象更新了它们的值。然后他们很好地序列化。当然,当你反序列化时,你需要从POCO对象中更新实体对象。

相关问题