使用 NetDataContractSerializer 共享类型
生活随笔
收集整理的這篇文章主要介紹了
使用 NetDataContractSerializer 共享类型
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在上一章節(jié)《WCF可序列化方式》 提到了NetDataContractSerializer 適用于客戶端與服務(wù)端共享類型信息,支持支持類型不變性。 但并沒有提供現(xiàn)成的特性,所以無法使用對數(shù)據(jù)契約進行標記的方式來達到使用NetDataContractSerializer的目的,必須通過自定制開發(fā),才能對操作契約進行標注。
1. NetDataContractFormatAttribute特性;
public class NetDataContractFormatAttribute : Attribute, IOperationBehavior{public void AddBindingParameters(OperationDescription operationDescription, BindingParameterCollection bindingParameters){}public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation){ReplaceDataContractSerializerOperationBehavior(operationDescription);}public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation){ReplaceDataContractSerializerOperationBehavior(operationDescription);}public void Validate(OperationDescription operationDescription){}public static void ReplaceDataContractSerializerOperationBehavior(OperationDescription description){DataContractSerializerOperationBehavior dcs = description.Behaviors.Find<DataContractSerializerOperationBehavior>();if (dcs != null){description.Behaviors.Remove(dcs);}description.Behaviors.Add(new NetDataContractSerializerOperationBehavior(description));}}2. NetDataContractSerializerOperationBehavior 行為;
public class NetDataContractSerializerOperationBehavior : DataContractSerializerOperationBehavior{private static NetDataContractSerializer serializer = new NetDataContractSerializer();public NetDataContractSerializerOperationBehavior(OperationDescription operationDescription): base(operationDescription){}public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList<Type> knownTypes){return NetDataContractSerializerOperationBehavior.serializer;}public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList<Type> knownTypes){return NetDataContractSerializerOperationBehavior.serializer;}}3. 將特性標記在契約中;
[ServiceContract(CallbackContract = typeof(IStockServiceCallback))]public interface IStockService{ [OperationContract]double GetPrice(string ticker);[OperationContract(IsOneWay = true)]void RegisterForUpdate(string ticker);[OperationContract][NetDataContractFormat]StockPrice GetStockPrice(string ticker);}轉(zhuǎn)載于:https://www.cnblogs.com/jerryshi/archive/2011/10/23/2221679.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的使用 NetDataContractSerializer 共享类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU 4651 数论 partitio
- 下一篇: 网络字节序 —— 主机字节序 (Sock