Dot-Net
“類型不是預期的”,使用 DataContractSerializer - 但它只是一個簡單的類,沒有有趣的東西?
我正在重構我的 XML 序列化,並想試試 DataContractSerializer。一切執行順利,直到需要序列化這個類:
using System; using System.Runtime.Serialization; namespace VDB_Sync.Model { [DataContract(Name="Konstant")] public class Konstant : DataFelt { [DataMember] private MySqlDbType mydataType; [DataMember] private object value; public Konstant(string navn, MySqlDbType dataType, object value) : base(navn, dataType, "*Konstant", false, false) { //this.navn = navn; this.mydataType = dataType; this.value = value; if (navn.Contains("*Løbenummer")) { navn = "*Konstant: " + Convert.ToString(value); } } public object Value { get { return value; } } } }它給了我這個:
不應使用數據合同名稱“Konstant:http://schemas.datacontract.org/2004/07/VDB_Sync.Model”鍵入“VDB_Sync.Model.Konstant”。考慮使用 DataContractResolver 或將任何靜態未知的類型添加到已知類型列表中 - 例如,通過使用 KnownTypeAttribute 屬性或將它們添加到傳遞給 DataContractSerializer 的已知類型列表中。
*到目前為止我找到的幫助指向集合和類型。我的班級確實有一個枚舉(MySqlDbType) - 但是得到這個:當我根本沒有聲明 DataMembers 時,我什至得到同樣的錯誤:-x 那麼 - 這裡發生了什麼?我錯過了什麼?
作為參考,這就是我序列化它的方式,VDB_SessionController 是根:*
public void GemKonfig(VDB_SessionController session) { var settings = new XmlWriterSettings() { Indent = true, IndentChars = "\t" }; var writer = XmlWriter.Create(defaultFile, settings); DataContractSerializer ser = new DataContractSerializer(typeof(VDB_SessionController)); ser.WriteObject(writer, session); writer.Close(); }
正在報告的異常是針對 VDB_Sync.Model.Konstant。這意味著在更遠的地方,這個類被拉到另一個類中,而那個類是被序列化的類。
問題在於,根據 Konstant 在此類中的嵌入方式(例如,如果它位於集合或通用列表中),DataContractSerializer 可能無法在反序列化期間為其外觀做好準備。
要解決此問題,您需要將 known-type 屬性應用於包含 Konstant 的類。根據您的序列化程式碼,我懷疑這是
VDB_SessionController.所以,試著用 KnownType 屬性裝飾這個類:
[KnownType(typeof(VDB_Sync.Model.Konstant)] public class VDB_SessionController