zoukankan      html  css  js  c++  java
  • Custom DataContractSerializerOperationBehavior

    public class MySerializerFormatAttribute : Attribute, IOperationBehavior 
       
    { 
         
    public void AddBindingParameters(OperationDescription description, BindingParameterCollection parameters) 
         
    { 
         
    } 
     
         
    public void Validate(OperationDescription description) 
         
    { 
         
    } 
     
         
    private static void ReplaceBehavior(OperationDescription description) 
         
    { 
             
    DataContractSerializerOperationBehavior dcsOperationBehavior = description.Behaviors.Find<DataContractSerializerOperationBehavior>(); 
             
    if (dcsOperationBehavior != null) 
             
    { 
               
    int idx = description.Behaviors.IndexOf(dcsOperationBehavior); 
                description
    .Behaviors.Remove(dcsOperationBehavior); 
                description
    .Behaviors.Insert(idx, new MyBehavior(description)); 
             
    } 
         
    } 
     
         
    public void ApplyClientBehavior(OperationDescription description, ClientOperation proxy) 
         
    { 
             
    ReplaceBehavior(description); 
         
    } 
     
     
         
    public void ApplyDispatchBehavior(OperationDescription description, DispatchOperation dispatch) 
         
    { 
             
    ReplaceBehavior(description); 
         
    } 
       
    }; 
     
       
    public class MySerializer : XmlObjectSerializer 
       
    { 
         
    public override bool IsStartObject(XmlDictionaryReader reader) 
         
    { 
             
    throw new NotImplementedException(); 
         
    } 
     
         
    public override object ReadObject(XmlDictionaryReader reader, bool verifyObjectName) 
         
    { 
             
    throw new NotImplementedException(); 
         
    } 
     
         
    public override void WriteEndObject(XmlDictionaryWriter writer) 
         
    { 
             
    throw new NotImplementedException(); 
         
    } 
     
         
    public override void WriteObjectContent(XmlDictionaryWriter writer, object graph) 
         
    { 
             
    throw new NotImplementedException(); 
         
    } 
     
         
    public override void WriteStartObject(XmlDictionaryWriter writer, object graph) 
         
    { 
             
    throw new NotImplementedException(); 
         
    } 
       
    } 
     
       
    // Custom Web service behaviour that passes custom serializer 
       
    public class MyBehavior : DataContractSerializerOperationBehavior 
       
    { 
         
    private static MySerializer serializer = new MySerializer(); 
     
         
    public MyBehavior(OperationDescription operationDescription) : base(operationDescription)  
         
    {  
         
    } 
     
         
    public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList<Type> knownTypes) 
         
    { 
             
    return MyBehavior.serializer; 
         
    } 
     
         
    public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList<Type> knownTypes) 
         
    { 
             
    return MyBehavior.serializer; 
         
    } 
       
    } 

  • 相关阅读:
    Eclipse在线安装spring-tool-suit插件
    使用Eclipse构建Maven项目
    uwsgi+flask环境中安装matplotlib
    开启flask调试
    linux进入软连接所指向的原目录
    eclipse打不开,报错 "java was started with exit code=13"
    gnuplot 的安装
    使用tcp_probe时最初没有输出,先卸载后加载模块之后就有了。
    一个简单的socket程序运行与抓包查看
    如何查看文件是dos格式还是unix格式的?
  • 原文地址:https://www.cnblogs.com/mxy1028/p/1940342.html
Copyright © 2011-2022 走看看