我定义了以下类
[DataContract(Name="PatientDocument")]
[KnownType(typeof(PatientDocument))]
public class PatientDocument
{
public PatientDocument()
{
//
// TODO: Add constructor logic here
//
}
[DataMember]
public virtual String r_object_id { get; set; }
[DataMember]
public virtual int i_partition { get; set; }
[DataMember]
public virtual String nhs_consultant { get; set; }
。 。 。
[DataMember]
public virtual String batch_name { get; set; }
[DataMember]
public virtual String document_type_code { get; set; }
[DataMember]
public virtual String nhs_patdoc_singlebodysite { get; set; }
}
,这用于以下功能
PatientDocuments pds = null;
PatientDocument[] results = null;
String PatientId = String.Empty;
StreamReader sr = null;
DataContractJsonSerializer serializer = null;
try
{
using ( MemoryStream ms = new MemoryStream())
{
pds = new PatientDocuments(Properties.Settings.Default.DataConnection);
serializer = new DataContractJsonSerializer(typeof(PatientDocument));
PatientId = context.Request.QueryString["PatientId"];
results = pds.Select(PatientId);
serializer.WriteObject(ms,results);
ms.Position = 0;
sr = new StreamReader(ms);
// now write to the context/browser
context.Response.ContentType = "text/plain";
context.Response.Write(sr.ReadToEnd());
}
}
catch(System.Exception ex)
{
throw;
}
该行
serializer.WriteObject(ms,results);
失败并显示消息
不希望输入数据合约名称为“ArrayOfPatientDocument:http://schemas.datacontract.org/2004/07/”的'PatientDocument []'。将任何静态未知的类型添加到已知类型列表中 - 例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。
我看不到如何使用KnownAttribute来允许我序列化类。
使用.Net 3.5
答案 0 :(得分:2)
您正在尝试使用为单 PatiantDocument
创建的序列化程序序列化PatientDocument
个对象的数组。将序列化程序初始化更改为:
serializer = new DataContractJsonSerializer(typeof(PatientDocument[]));
您不需要KnownType
属性,因为您没有非基本类型的任何属性(除非剪切代码中有一些属性)。