更新后XmlSerializer停止工作

时间:2012-02-08 13:23:03

标签: silverlight wcf-ria-services xmlserializer

我正在使用XmlSerializer。直到现在我都没有遇到任何问题。我将Silverlight从4更新到5,同时还将WCF RIA服务从v1 SP1更新到v1 SP2。现在,以下行给出了一个错误。

XmlSerializer s = new XmlSerializer(typeof(MyCustomObject));

错误是:

System.InvalidOperationException:System.ServiceModel.DomainServices.Client.EntityConflict无法序列化,因为它没有无参数构造函数。

我正在使用的对象(示例中的MyCustomObject)没有以任何方式改变,因此我开始认为它是SL5或新的RIA服务破坏了我的代码。我没有找到任何重大变更文件或提到这可能发生。我不知道为什么它与EntityConflict有问题,因为我没有在我的对象中使用任何实体。

有没有人看到过这样的错误和/或知道如何解决?

UPDATE!

在EntityConflict是实体之前错误消息所说的最终属性。我认为这有所不同,但它以前一直在努力。我也想知道为什么序列化程序已经尝试在构造函数中序列化对象?

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我通过使用中间可序列化的POCO对象解决了这个问题,这些对象是我的自定义对象(从Entity继承)的副本。 POCO对象未从Entity继承。我刚从原始的Entity对象更新了它们的值。然后他们很好地序列化了。当然,当您反序列化时,您需要从POCO对象更新您的Entity对象。