2010-06-01 53 views
1

我需要使用XMLSerializer序列化動態加載的類型的類。如何在運行時爲XML序列化設置默認值到動態加載類型的屬性

使用XML序列化程序時,未初始化的值未被序列化。我沒有控制我正在使用的程序集,因此無法使用XML屬性來指定屬性的默認值。所以我想我需要遞歸地將所有屬性和子屬性設置爲其默認值,然後進行序列化。 (請讓我知道如果有什麼更好的辦法)

其次this

Activator.CreateInstance(propType);

但在上面的線上抱怨沒有一個類型的無參數構造函數。

試過this: subObject = FormatterServices.GetUninitializedObject(propType); 但這個錯誤提示「值無效」,沒有內部異常。

如果您需要更多信息,請讓我知道。

回答

1

如果有問題的類型沒有公共無參數構造函數,那麼您會很困難。您可以通過使用接受XmlAttributeOverrides對象的constructor overload來解決屬性問題,您可以使用該對象完全配置包括默認值(通過XmlAttributes.XmlDefaultValue)的序列化程序,但是有些事情您不能這樣做 - 並解決構造方法的限制是其中之一。

這是什麼情況?

  • 如果你想XML,那麼我會介紹一個DTO層:某些物體看起來像正在談論的,但很簡單,你的控制之下。適用於XmlSerializer。如果你只是想要序列化(而xml是一個實現細節),那麼你可以編寫代碼來映射兩個
  • 之間的映射,然後有其他序列化程序可以提供幫助。例如,DataContractSerializerprotobuf-net;要麼在這裏更通用。