【发布时间】:2016-11-03 17:23:14
【问题描述】:
我正在开发的系统正在使用 DataContractJsonSerializer。 服务如下所示:
[HttpPost, Route("RunQuery")]
public List<BIResultRecord> RunQuery(BIQuery query) {
// Logic
}
BIQuery 类层次结构如下:
[DataContract]
[KnownType(typeof(BIQuery1))]
public class BIQuery
{
[DataMember]
public string Member { get; set; }
[DataMember]
public QueryTypeEnum QueryType { get; set; }
}
[DataContract]
public class BIQuery1 : BIQuery
{
public BIQuery1()
{
QueryType = QueryTypeEnum.Type1;
}
[DataMember]
public ClassSpecificObject Object { get; set; }
}
问题:
虽然我将 BIQuery1 作为 json 对象发送,但它始终被反序列化(在我的 RunQuery 方法中)作为父对象 (BIQuery)。
我的尝试:
我删除了默认的格式化程序并添加了一个新的:
public class DataContractJsonFormatter : JsonMediaTypeFormatter
{
public override DataContractJsonSerializer CreateDataContractSerializer(Type type)
{
return new DataContractJsonSerializer(type, new DataContractJsonSerializerSettings() { EmitTypeInformation = EmitTypeInformation.AsNeeded });
}
}
我在 .NET 中序列化了对象以查看 JSON 结构和 将其克隆到请求中。我看到它添加了
"__type" : "BIQuery1"
到 JSON,我也在使用它,它没有任何改变。
请帮忙!
更多详情
.NET 系统(客户端和服务器)按原样在生产中运行,因此目前只允许进行微小的更改。我还在制作一个可以通过 REST 与现有服务一起使用的 Web 客户端。
【问题讨论】:
标签: c# .net json rest serialization