2013-05-15 37 views
0

我已經運行到與繼承的類顯然涉及另一個問題:WCF和ResponseFormat = WebMessageFormat.Json與繼承類

我有例如這個超級類。

public class Person 
{ 
    public string Firstname { get; set; } 
    public string Lastname { get; set; } 
    public string Email { get; set; } 
} 

然後一個子類:

public class Member : Person 
{ 
    public int MembershipId { get; set; } 
    public string Password { get; set; } 
    public List<Foo> Foos { get; set; } 
} 

當我返回一個會員用下面的代碼,我什麼也沒得到有用:

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
public Member GetMember() 
{ 
    return new Member 
    { 
     Firstname = "Jane", 
     Lastname = "Doe", 
     Email = "[email protected]", 
     MembershipId = 10, 
     Password = "*****", 
     Foos = new List<Foo> { }; 
    }; 
} 

類/對象未繼承是序列化並以json格式返回,沒有任何問題。

請問有沒有辦法讓我的會員對象正確返回?我一直在解決這個問題,我的結論是它必須與繼承的類和json有關。

+0

你得到的錯誤是什麼? – carlosfigueira

+0

我沒有收到任何錯誤。它只是掛起,說在瀏覽器中等待本地主機。事件日誌中也沒有。 – codingjoe

+0

{「d」:[{「__ type」:「MyObject:#MywebApp.Entities」},{「__ type」:「MyObject:#MywebApp.Entities」},{「__ type」:「MyObject:#MywebApp.Entities」 } < - 我其實只是得到這個。 – codingjoe

回答

0

我使用Newtonsoft的JSON.net結束了。我會推薦使用它,而不是浪費時間在.net中的本機json功能。

http://json.codeplex.com/

+0

除了我在這裏的答案,我可以看到我是雙重編碼JSON。由於我的ResponseFormat = WebMessageFormat.Json。我現在試圖弄清楚,如何從我的wcf服務中返回純字符串/明文,所以它不會得到雙倍的json編碼。 – codingjoe

0

試試這個修復

[DataContract] 
public class Person 
{ 
    [DataMember] 
    public string Firstname { get; set; } 
    [DataMember] 
    public string Lastname { get; set; } 
    [DataMember] 
    public string Email { get; set; } 
} 
[DataContract] 
public class Member : Person 
{ 
    [DataMember] 
    public string MembershipId { get; set; } 
    [DataMember] 
    public string Password { get; set; } 
    [DataMember] 
    public List<Foo> Foos { get; set; } 
} 
0

其實我對繼承的類和JSON序列化理論是有缺陷的。 它的工作原理,我不需要[Datacontrac]和[Datamember]裝飾器。還有其他的錯誤。也許我的結構太深,太長。 我不知道JSON是否對尺寸有一些限制。

+0

我從來沒有發現問題是什麼,也沒有出現在篡改數據或提琴手中。我的結論仍然是.net中的本機json功能不穩定。我不得不使用Newtonsoft的json.net。 – codingjoe