Как я могу вернуть объект, содержащий динамический список?
У меня есть работающий 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;
}
EDIT
Ответ Авраама Цяна - именно то, что я искал.
Мой сервис отвечает правильно сериализованным Bla1
-объектом.
{
"__type":"Bla1",
"id":22,
"num":22
}
Если кто-то знает способ подавления автоматически добавленного "__type":"Bla1"
пожалуйста, дайте мне знать ...