我的 json 字符串包括一个固定类型的标头和非固定类型的主体,如下所示:
[DataContract]
public class ServiceResponseHeader
{
[DataMember]
public string ErrorCode { get; set; }
[DataMember]
public string Message { get; set; }
}
[DataContract]
public class ServiceResponse
{
[DataMember]
public ServiceResponseHeader Header { get; set; }
[DataMember]
public object Body { get; set; }
}
在运行时,我可以从配置文件中获取 Body 的类型,但是如何通过 DataContractJsonSerializer.ReadObject() 将 json 反消毒为对象指定类型?
示例代码:
string json = @"{ "Header": {"ErrorCode":"0000", "Message":"Got Profile Successfully"}, "Body": [{"DisplayName":"Mike Code","PictureUrl":null,"Title":"Manager"}] }"
Type objType = Type.GetType("MyAssembly.MyTypeName"); //Get Type from configuration file
ServiceResponse obj = new ServiceResponse ()
{
Header = new ServiceResponseHeader(),
Body = Activator.CreateInstance(objType)
};
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
ServiceResponse returnObj = (ServiceResponse)serializer.ReadObject(ms);
}
在这里我可以正确获取 Header(returnObj.Header.Message) ,但 returnObj.Body 不是 MyAssembly.MyTypeName 的类型,我无法获取它的属性。
解决此类问题的任何建议?