wcf - 通过 WCF 调用传递继承的“数据协定”?
问题描述
我的 WCF 端点之一具有此方法:
GetData(DataTable dt)
我试图在继承自 DataTable 类的客户端上创建一个类
public class ExtendedDataTable : DataTable{
//...implementation
}
并将其与端点调用一起传递:
GetData(new ExtendedDataTable());
然后我得到了SerializationException。根据错误,它建议我使用DataContractResolver或KnownType属性。
我不想使用 KnownType,因为我不应该每次有人决定继承我的 DataContract 时都更新端点。我无法编写任何 DataContractResolver,因为我没有扩展 DataTable 类的确切结构。 是否可以从客户端扩展 DataContract?如果是这样,最佳做法是什么?
谢谢!
解决方案
我不推荐使用Datatable,它让WCF很容易出现客户端和服务器序列化的问题,比如需要指定表名。最好使用自定义数据类型,我们可以使用带有 KnownType 属性的继承类型。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/data-contract-known-types
在我这边,我不能使用继承的数据表,而我可以使用任意使用 Knowntype 属性的自定义类。
请参考我的代码段。
[DataContract]
[KnownType(typeof(Product))]
public class MyData
{
[DataMember]
public ProductBase Product { get; set; }
}
[DataContract]
public class ProductBase
{
[DataMember]
public int ID { get; set; }
}
[DataContract]
public class Product : ProductBase
{
[DataMember]
public string Name { get; set; }
}
推荐阅读
- vba - 行中的单元格等于一个单词,然后在其下方的每个使用的单元格中添加 0
- amazon-dynamodb - 如何直接订阅我的 AWS AppSync 数据源?
- c++ - 为什么不能在 C++11 中初始化静态数据成员?
- sas - 如何在没有定义的情况下使宏可调用
- javascript - ES6:优化命令模式
- javascript - (THREE.JS) 计算自定义缓冲区几何的自定义 UV
- c# - 使用行为动画 DataGridRow
- react-native - react native项目目录结构中的react native区别
- vba - vba excel,增量宏
- text - 我在哪里可以找到像 ['Dr.', 'Mrs', 'DC', 'Inc.','.com'] 这样的单词列表,这些单词在按句点(标点符号)分割文本时会被忽略?