问题移植到Mono:在反序列化期间由于名称空间问题而无法转换参数

时间:2013-01-21 18:23:41

标签: c# wcf ubuntu mono deserialization

在Windows上,使用.NET。序列化或反序列化以下WCF Web对象没有问题:

[DataContract]
public class Payload
{
    public Payload() {}

    public class SubPayloadOne
    {
        public String Name { get; set; }
        public int Count { get; set; }
    }

    public class SubPayloadTwo
    {
        public String Name { get; set; }
        public int Number { get; set; }
    }

    [DataMember]
    public SubPayloadOne P1 { get; set; }
    [DataMember]
    public SubPayloadTwo P2 { get; set; }
}

在Mono上(在Ubuntu上),尝试反序列化上面示例中的Web对象将导致以下错误:System.InvalidOperationException:无法为属性String [Payload + SubPayloadOne + Name]设置类型的值[Payload + SubPayloadTwo + Name] String ---> System.ArgumentException:无法转换参数

我的理论是,在反序列化对象时,Mono不包含完整的命名空间。换句话说,它为Payload.SubPayloadOne.Name混淆Payload.SubPayloadTwo.Name,因为如果你不考虑它们的完整命名空间,两个对象都是“Name”。

通过上面的理论,我尝试通过将Payload.SubPayloadOne.Name或Payload.SubPayloadTwo.Name重命名为其他内容来解决此问题,例如,Payload.SubPayloadTwo.NameTwo。哪个确实奏效了。但是,这会破坏与现有产品的反向兼容性(因为现有的Payload对象已经在数据库中)。

如果可能的话,我正在寻找一种不涉及更改Web对象的解决方案。有什么想法吗?

谢谢!

0 个答案:

没有答案