如果方法返回IList<object>这样的数据 ,要求在接口方法上添加
[ServiceKnownType(typeof(XXX))]不知道我说法正确不?
目前有个问题,因为这个返回IList<object>的函数可能有很多种类型,接口方法上加上了
很多[ServiceKnownType(typeof(XXX))]
如:
[OperationContract]
[ServiceKnownType(typeof(AAA))]
[ServiceKnownType(typeof(BBB))]
[ServiceKnownType(typeof(CCC))]
IList<object> GetSomeData();像上面这个写法有没有更好的替代方式啊?感觉这样会写上很多ServiceKnownType
[ServiceKnownType(typeof(XXX))]不知道我说法正确不?
目前有个问题,因为这个返回IList<object>的函数可能有很多种类型,接口方法上加上了
很多[ServiceKnownType(typeof(XXX))]
如:
[OperationContract]
[ServiceKnownType(typeof(AAA))]
[ServiceKnownType(typeof(BBB))]
[ServiceKnownType(typeof(CCC))]
IList<object> GetSomeData();像上面这个写法有没有更好的替代方式啊?感觉这样会写上很多ServiceKnownType
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using System.Xml;namespace NetContract
{
public class NetDataContractAttribute : Attribute, IOperationBehavior
{
public void AddBindingParameters(OperationDescription description, BindingParameterCollection parameters)
{
}
public void ApplyClientBehavior(OperationDescription description, ClientOperation proxy)
{
ReplaceDataContractSerializerOperationBehavior(description);
}
public void ApplyDispatchBehavior(OperationDescription description, DispatchOperation dispatch)
{
ReplaceDataContractSerializerOperationBehavior(description);
}
public void Validate(OperationDescription description)
{
} private static void ReplaceDataContractSerializerOperationBehavior(OperationDescription description)
{
DataContractSerializerOperationBehavior dcsOperationBehavior = description.Behaviors.Find<DataContractSerializerOperationBehavior>();
if (dcsOperationBehavior != null)
{
description.Behaviors.Remove(dcsOperationBehavior);
description.Behaviors.Add(new NetDataContractSerializerOperationBehavior(description));
}
}
public class NetDataContractSerializerOperationBehavior : DataContractSerializerOperationBehavior
{
public NetDataContractSerializerOperationBehavior(OperationDescription operationDescription) : base(operationDescription)
{
}
public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList<Type> knownTypes)
{
return new NetDataContractSerializer();
}
public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList<Type> knownTypes)
{
return new NetDataContractSerializer();
}
}
}
}用这段代码后,在domain中的类就不用加[DataContract]
在接口上加 [NetDataContract]
public interface IBaseServer
{
[OperationContract(Name = "1")]
[NetDataContract]
IList GetList(string statementname, object dataobject);
}