WCF序列化与反序列化复杂类型精要.doc
文本预览下载声明
WCF 序列化与反序列化复杂类型(DataContractSerializer)
NET的类型可以分为两种:声明类型和真实类型。我们提倡面向接口的编程,对象的真实类型往往需要在运行时才能确定,在编程的时候往往只需要指明类型的声明类型,比如类型实现的接口或者抽象类。当我们使用基于接口或者抽象类创建的DataContractSerializer去序列化一个实现了该接口或者继承该抽象类的实例的时候,往往会因为对对象的真实类型无法识别造成不能正常地序列化。
现在,我们定义两个带数据协定的类——ActionInfo和ActionParameterInfo:
[csharp] view plain copy 在CODE上查看代码片派生到我的代码片
/// summary
/// 动作信息
/// /summary
[DataContract(Namespace = /jiankunking)]
[KnownType(GetKnowTypes)]
//[KnownType(GetKnowTypesQuote)]
public class ActionInfo
{
private string actionName;
/// summary
/// 动作名称
/// /summary
[DataMember]
public String ActionName
{
get { return actionName; }
set { actionName = value; }
}
private string actionId;
/// summary
/// 动作唯一标识
/// /summary
[DataMember]
public String ActionId
{
get { return actionId; }
set { actionId = value; }
}
private Dictionarystring, ActionParameterInfo actionParameters;
/// summary
/// 参数信息
/// /summary
[DataMember]
public Dictionarystring, ActionParameterInfo ActionParameters
{
get
{
if (actionParameters == null)
{
actionParameters = new Dictionarystring, ActionParameterInfo();
}
return actionParameters;
}
set
{
actionParameters = value;
}
}
static Type[] GetKnowTypes()
{
return new Type[] { typeof(Dictionarystring, ActionParameterInfo) };
}
//[DataMember]
//public object Quote;
//static Type[] GetKnowTypesQuote()
//{
// return new Type[] { typeof(Dictionarystring, int) };
//}
}
/// summary
显示全部