簡體   English   中英

WCF REST JSON 返回動態列表

[英]WCF REST JSON return dynamic list

如何返回包含動態列表的對象?

我有一個可用的 REST 服務,我想在其中返回 JSON 數據。 這在大多數情況下效果很好——除了一種:

在那個特定情況下,我有一個List<Bla> ,它可以包含BlaBla1類型的對象(從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM