[英]WCF REST JSON return dynamic list
如何返回包含動態列表的對象?
我有一個可用的 REST 服務,我想在其中返回 JSON 數據。 這在大多數情況下效果很好——除了一種:
在那個特定情況下,我有一個List<Bla>
,它可以包含Bla
和Bla1
類型的對象(從Bla
繼承)。 一旦我將Bla1
添加到列表中,我在瀏覽器中得到的結果就是一個錯誤。
Firefox:跨域請求被阻止:同源策略不允許讀取https://.../DoSomething 上的遠程資源。 (原因:CORS 請求沒有成功)。
Chrome:獲取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;
}
}
服務:
[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;
}
編輯
亞伯拉罕·錢的回答正是我要找的。
我的服務以正確序列化的Bla1
響應。
{
"__type":"Bla1",
"id":22,
"num":22
}
如果有人知道抑制自動添加的"__type":"Bla1"
請告訴我...
根據你的錯誤和代碼,我做了一個測試,發現Bla類存在序列化問題。 在傳遞Bla類時,WCF無法識別子類(Bla1)以及如何序列化它們,因此我們應該將KnowType屬性添加到基類中。
[DataContract]
[KnownType(typeof(Bla1))]
public class Bla
{
[DataMember] public int id;
public Bla(int id)
{
this.id = id;
}
}
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/data-contract-known-types
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.