有人可以向我解釋爲什麼第一個示例將序列化爲XML,第二個將拋出有關嘗試將所有類型轉換爲對方的運行時錯誤?如果我從第二個示例中刪除了XmlElement
屬性,它將會序列化,但XML元素名稱將會出錯(「Item」而不是爲其類型指定的屬性)。第一個片段是使用模式文件從XSD工具生成的。通用屬性的序列化
更好的是,有沒有辦法讓這個工作?我更喜歡使用通用類型來投射/從對象。它使得代碼更簡潔。明確地轉換對象表明您的設計存在問題。
public partial class OAIPMHtype
{
private object itemsField;
[XmlElement("GetRecord", typeof(GetRecordType))]
[XmlElement("Identify", typeof(IdentifyType))]
[XmlElement("ListIdentifiers", typeof(ListIdentifiersType))]
[XmlElement("ListMetadataFormats", typeof(ListMetadataFormatsType))]
[XmlElement("ListRecords", typeof(ListRecordsType))]
[XmlElement("ListSets", typeof(ListSetsType))]
[XmlElement("error", typeof(OAIPMHerrorType))]
public object Item
{
get { return this.itemsField; }
set { this.itemsField = value; }
}
}
這不會序列化。
public class OaiPmh<T>
{
private T itemsField;
[XmlElement("GetRecord", typeof(GetRecordType))]
[XmlElement("Identify", typeof(IdentifyType))]
[XmlElement("ListIdentifiers", typeof(ListIdentifiersType))]
[XmlElement("ListMetadataFormats", typeof(ListMetadataFormatsType))]
[XmlElement("ListRecords", typeof(ListRecordsType))]
[XmlElement("ListSets", typeof(ListSetsType))]
[XmlElement("error", typeof(OAIPMHerrorType))]
public T Item
{
get { return itemsField; }
set { itemsField = value; }
}
}
,併爲進一步澄清,我曾嘗試創建XmlSerializer
對象時指定的所有額外的類型,並沒有幫助。
這就是會拋出的異常:
Unable to generate a temporary class (result=1).
error CS0030: Cannot convert type 'ErrorRequest' to 'GetRecordRequest'
error CS0030: Cannot convert type 'ErrorRequest' to 'ListRecordsRequest'
error CS0030: Cannot convert type 'ErrorRequest' to 'IdentityRequest'
error CS0030: Cannot convert type 'ErrorRequest' to 'ListSetsRequest'
error CS0030: Cannot convert type 'ErrorRequest' to 'ListIdentifiersRequest'
error CS0030: Cannot convert type 'ErrorRequest' to 'ListMetadataFormatsRequest'
error CS0029: Cannot implicitly convert type 'ListSetsRequest' to 'ErrorRequest'
error CS0029: Cannot implicitly convert type 'ListIdentifiersRequest' to 'ErrorRequest'
error CS0029: Cannot implicitly convert type 'ListMetadataFormatsRequest' to 'ErrorRequest'
error CS0029: Cannot implicitly convert type 'GetRecordRequest' to 'ErrorRequest'
error CS0029: Cannot implicitly convert type 'ListRecordsRequest' to 'ErrorRequest'
error CS0029: Cannot implicitly convert type 'IdentityRequest' to 'ErrorRequest
'
它種有意義與泛型類型,眼看類型是如何具體結合在編譯時。但看到它如何與對象引用一起工作,在我看來,它也應該使用泛型類型。
什麼是拋出的異常? – 2011-02-11 19:32:50
謝謝,我會編輯。 – MonkeyWrench 2011-02-11 19:38:44
什麼是'ErrorRequest`? – 2011-02-11 20:20:04