惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
F
Fortinet All Blogs
B
Blog RSS Feed
Last Week in AI
Last Week in AI
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
P
Proofpoint News Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Microsoft Security Blog
Microsoft Security Blog
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
雷峰网
雷峰网
C
Check Point Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
博客园 - 司徒正美
U
Unit 42
量子位

博客园 - 牟向阳

Implementing SQL Server Row and Cell Level Security Daily English 你知道你的後照鏡調錯了嗎?原來裡面隱藏著視線死角! Silverlight Freezing & Crash Silverlight 中实现Service同步调用 Silverlight:获取ContentTemplate中的命名控件 silverlight 4常用的多线程技术 推荐几款Silverlight Tools【转载】 一个配置文件的Mapping Emit Vs CodeDom SQL Service查询分析 WPF&Silverlight精髓 支持定位当前页,自定义排序的分页SQL(拒绝动态SQL) WCF学习经验分享,如何更好地学习WCF? 后台管理界面收集 两个使用的Ajax Demo 自学面向对象 发几个有价值的.net源码 我是如何带领团队开发项目的
Custom DataContractSerializerOperationBehavior
牟向阳 · 2011-01-20 · via 博客园 - 牟向阳

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; 
     
} 
   
}