2012-02-08 185 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對象中更新實體對象。

相關問題