2011-03-23 70 views
0

我嘗試用XmlSerializer的序列化 - 但我有派生類問題:.NET Compact Framework的3.5序列化問題與派生類

這些都是我的課:

[System.Xml.Serialization.XmlIncludeAttribute(typeof(Child))] 
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.demo.com")] 
public class BaseClass { 
    private int myIntField; 
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public int myInt { 
    get { return this.myIntField; } 
    set { this.myIntField = value; } 
    } 
} 

[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.demo.com")] 
public class Child : BaseClass { 
    private int keyField; 
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public int key { 
    get { return this.keyField; } 
    set { this.keyField = value; } 
    } 
} 

發現,該序列爲如果包含名稱空間,則父字段僅適用:

XmlSerializer mySerializer = new XmlSerializer(typeof(Child)); 

// NOT WORKING 
StringReader sr = new StringReader(
    "<Child>" + 
    "<myInt>10</myInt>" + 
    "<key>1</key>" + 
    "</Child>"); 

/* WORKING 
StringReader sr = new StringReader(
    "<Child>" + 
    "<myInt xmlns=\"http://www.demo.com\">10</myInt>" + 
    "<key>1</key>" + 
    "</Child>");*/ 

Child myChild = (Child)mySerializer.Deserialize(sr); 

在工作站框架上,不需要名稱空間。

所以我得到的問題,使用webservices,因爲命名空間不包含在父領域。

+0

您確定它是版本3.5嗎?我不認爲這個版本存在。有3/3.1和4/4.5。我從第5版開始就一直在使用CF,所以如果它真的是3.x版,它可能不支持現代Web服務標準。 – 2011-03-23 13:59:20

+0

你不使用ColdFusion,所以你不應該包含coldfusion標籤。 ColdFusion!= Compact Framework。它看起來好像這是你在這個問題上的第二篇文章(第一:http://stackoverflow.com/questions/5402678/webservice-cf-3-5-and-class-inheritance/),並且你錯誤地標記了它倍。 – 2011-03-23 18:29:07

+0

ooo我看到了 - 感謝您的建議 – judwei 2011-03-23 18:43:42

回答

0

我不確定我是否理解。 Web服務是用.net還是coldfusion編寫的?你的問題類似於coldfusion,但據我所知,cfc的(類)在cf3.5中不存在。

不要提你使用的是一個絕對古老的cf版本。版本9已經有一年多的時間了。

+0

我正在使用Compact Framework 3.5 – gert 2011-03-23 12:44:40

0

對於WebServices中的派生類作爲響應,我有一個使用SoapExtension和Reflection的WorkAround。

相關問題