2009-02-10 75 views
2

我通过向它添加一些重要字段来'扩展'System.DateTime结构。理想情况下,我希望能够通过web服务将此对象传递给winforms客户端。通过webservices对结构对象进行序列化

我已经将stuct类型标记为[Serializable],它也暗示了ISerializable,但是如果我检查由webservice传递的XML,它仅包含对象的空标记。

在各处放置断点让我相信,当对象变得脱水时,ISerializable方法void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)永远不会被调用。

还有为什么我宁愿把这个作为一个结构,但如果需要将其转换为一个类各种原因。

有谁知道为什么GetObjectData使用由.NET框架,同时正在准备数据的web服务响应被忽略?我正在使用的结构包含一个DateTime成员和一些布尔值。

请注意,这是.NET 2.0!

干杯

回答

2

首先,网络服务使用XmlSerializer - 所以你需要IXmlSerializable用于自定义序列。标准XmlSerializer序列化仅对具有getter和setter的公共属性起作用。

二,结构一般不为Web服务DTO对象很好地工作;特别是XmlSerializer要求事情是可变的......哪些结构不应该是。

我会使用一个类,个人。如果你能提供更多的信息,我也许能说更多...

例如:

[Serializable] 
public class FunkyTime 
{ 
    [XmlAttribute] 
    public DateTime When { get; set; } 
    [XmlAttribute] 
    public bool IsStart { get; set; } 
    [XmlAttribute] 
    public bool IsEnd { get; set; } 
} 

(注意,您可以调整以各种方式XML布局/名)

+0

谢谢,它是我需要实现的IXmlSerializable接口,它能正常工作 - 仍然在一个结构中! – Ash 2009-02-10 15:29:18