WCFSystem.Object序列化我有一个需求,在WCF中必须使用System.Object作为参数。因为它不可序列化,所以我收到消息说它不支持该操作,因为它使用System.Object。任何解决这个问题的方法。通过网络发送消息时,WCF默认情况下仅序列化足以获取消息的契约成员。如果您的消息将“对象”作为参数,您需要通过线路发送带有类型信息的额外信息。如果您在客户端和服务器上使用相同的程序集,您可以在服务器(和客户端)中使用NetDataContractSerializer(而不是默认的DataContractSerializer),它们将能够交换任意对象,如下面的代码所示。但是,正如@MarcGravell所说,这可能不是WCF的最佳用法...启用NetDataContractSerializer的代码:以上就是C#学习教程的全部内容:WCFSystem.Object序列化,如果对大家有用需要的话了解更多C#学习教程,希望大家多多关注—publicclassPost_8b2c7ad7_b1c3_410b_b907_f25??cee637110{publicclassPerson{publicstringName{get;放;}publicintAge{得到;放;}publicoverridestringToString(){returnstring.Format("Person[Name={0},Age={1}]",Name,Age);}}[ServiceContract]publicinterfaceITest{[OperationContract]objectEcho(objectobj);}公共类服务:ITest{publicobjectEcho(objectobj){returnobj;}}publicclassReplaceSerializerOperationBehavior:DataContractSerializerOperationBehavior{publicReplaceSerializerOperationBehavior(OperationDescriptionoperation):base(operation){}publicoverrideXmlObjectSerializerCreateSerializer(Typetype,stringname,stringns,IListknownTypes){返回新的NetDataContractSerializer(name,ns);}公共覆盖XmlObjectSerializerCreateSerializer(Typetype,XmlDictionaryStringname,XmlDictionaryStringns,IListknownTypes){returnnewNetDataContractSerializer(name,ns);}publicstaticvoidReplaceSerializer(ServiceEndpointendpoint){foreach(varoperationinendpoint.Contract.Operations){for(inti=0;ifactory=newChannelFactory(newBasicHttpBinding(),newEndpointAddress(baseAddress));ReplaceSerializerOperationBehavior.ReplaceSerializer(factory.Endpoint);ITestproxy=factory.CreateChannel();Console.WriteLine(proxy.Echo("Hello"));Console.WriteLine(proxy.Echo(123.456));Console.WriteLine(proxy.Echo(newUri("http://tempuri.org")));Console.WriteLine(proxy.Echo(newPerson{Name="JohnDoe",Age=33}));((IClientChannel)proxy).Close();factory.Close();Console.Write("PressENTERtoclosethehost");Console.ReadLine();host.Close();}}本文收集自网络,不代表立场,如有涉及侵权,请点击维权联系管理员删除,如需转载请注明出处:
