C# 向Mono移植问题:由于反序列化过程中的命名空间问题,无法转换参数
在Windows上,使用.NET。序列化或反序列化以下WCF web对象没有问题:C# 向Mono移植问题:由于反序列化过程中的命名空间问题,无法转换参数,c#,wcf,ubuntu,mono,deserialization,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 SubP
[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:未能为属性字符串[Payload+SubPayloadOne+Name]String-->System.ArgumentException:无法转换参数
我的理论是Mono在反序列化对象时没有包含完整的名称空间。换句话说,它混淆了Payload.SubPayloadOne.Name的PayLoad .PayPayLoToWo.No.2,因为如果不考虑它们的完整命名空间,两个对象都是“名称”。
按照上述理论,我尝试通过将Payload.SubPayloadOne.Name或Payload.SubPayloadTwo.Name重命名为其他名称来解决此问题,例如Payload.SubPayloadTwo.NameTwo。这确实有效。然而,这将破坏与现有产品的反向兼容性(因为现有有效负载对象已经在数据库中)
如果可能的话,我正在寻找一种不涉及更改web对象的解决方案。有什么想法吗
谢谢 在我看来像是一个Mono bug,我来看看。你不需要字段上的DataMember属性吗?谢谢Pete。我忘记了示例中的那些,尽管它们确实存在于实际实现中。但不会影响bug:)我更新了示例。