Cla*_*las 1 .net c# wcf serialization
我遇到了序列化问题.我的Silverlight应用程序不期望我的某个属性在业务对象中,并且不知道如何处理它.以前我通过设置一个类似下面的例子的KnownTypeAttribute来解决这个问题,但在这种情况下它不起作用.
我曾经这样解决过:
[DataContract(Name = "baseClass")]
public class baseClass { }
[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }
[DataContract(Name = "busObj2")]
[KnownType(typeof(busObj1))]
public class busObj2 : baseClass
{
public busObj1 myObj { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是我的结构略有不同,如下所示:
[DataContract(Name = "baseClass")]
public class baseClass { }
[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }
[DataContract(Name = "busObj2")]
[KnownType(typeof(busObj1))]
public class busObj2 : baseClass
{
public busObj1 myObj { get; set; }
}
// This is the class that I want to send via WCF and that cannot be serialized
// because the serializer doesn't expect busObj1.
[DataContract(Name = "busObj3")]
public class busObj3 : busObj2 { }
Run Code Online (Sandbox Code Playgroud)
我非常感谢任何可能出错的想法!
此致,Clas
您需要将已知的type属性放在基础对象上:
[DataContract(Name = "baseClass")]
[KnownType(typeof(busObj1))]
[KnownType(typeof(busObj2))]
[KnownType(typeof(busObj3))]
[KnownType(typeof(busObj4))]
public class baseClass { }
[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }
[DataContract(Name = "busObj2")]
public class busObj2 : baseClass { }
[DataContract(Name = "busObj3")]
public class busObj3 : busObj1
{
public busObj2 myObj { get; set; }
}
[DataContract(Name = "busObj4")]
public class busObj4 : busObj3 { }
Run Code Online (Sandbox Code Playgroud)
或者如果您不想使用这些ServiceKnownType属性污染您的域模型,您也可以在web.config中执行此操作,或使用服务合同中的属性.
| 归档时间: |
|
| 查看次数: |
607 次 |
| 最近记录: |