2011-03-23 45 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。

相关问题