【发布时间】:2019-04-04 12:15:39
【问题描述】:
如何返回包含动态列表的对象?
我有一个可用的 REST 服务,我想在其中返回 JSON 数据。 这在大多数情况下都非常有效 - 除了一种情况:
在这种特定情况下,我有一个List<Bla>,它可以包含Bla 和Bla1(继承自Bla)类型的对象。
一旦我将Bla1 添加到列表中,我在浏览器中得到的结果就是一个错误。
Firefox: 跨域请求被阻止:同源策略不允许读取位于https://.../DoSomething 的远程资源。 (原因:CORS 请求未成功)。
Chrome: GET https://.../DoSomething net::ERR_SPDY_PROTOCOL_ERROR
如何返回包含动态列表的对象?
类
[DataContract]
public class Blibla
{
[DataMember] public bool requestSuccess;
[DataMember] List<Blubb> blubb;
[DataMember] List<Bla> blas;
public Blibla(bool success)
{
this.requestSuccess = success;
blubb = new List<Blubb>() { new Blubb(11, "einser"), new Blubb(22, "zweier"), new Blubb(33, "dreier") };
blas = new List<Bla>() { new Bla(11), new Bla1(22, 22) };
}
}
[DataContract]
public class Bla
{
[DataMember] public int id;
public Bla(int id)
{
this.id = id;
}
}
[DataContract]
public class Bla1 : Bla
{
[DataMember] public int num;
public Bla1(int id, int num) : base(id)
{
this.num = num;
}
}
[DataContract]
public class Blubb
{
[DataMember] public int ID;
[DataMember] public string name;
public Blubb(int id, string name)
{
this.ID = id;
this.name = name;
}
}
IService:
[Description("returns service's details")]
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
Blibla DoSomething();
服务:
public Blibla DoSomething()
{
Message msg;
DoHttpMethodTypeSpecific();
Blibla bb = new Blibla(true);
return bb;
}
编辑
Abraham Qian 的答案正是我想要的。
我的服务以正确序列化的Bla1-object 响应。
{
"__type":"Bla1",
"id":22,
"num":22
}
如果有人知道一种方法来抑制自动添加的"__type":"Bla1"
请告诉我...
【问题讨论】: