2014-05-09 110 views
0

我需要我的WCF應用程序返回的複雜類型WCF JSONP返回複雜類型

============================ ==

情況1只是2個字段。不需要浪費任何人的時間w/

==============================
//情況2 - 1維數組

如果返回類型看起來像這樣

public class TestResult 
    { 
     public string Key = "myKey"; 
     public string Message = "myMessage"; 
     public string[] fields; 
    } 

和實現(片斷)看起來像這樣

r.fields = new string[] { "name", "varchar(32)", "bob" }; 
return r; 

我得到了我期望

{"GetStringArrayResult":{"Key":"myKey", 
         "Message":"myMessage", 
      "fields":["name","varchar(32)","bob"]}} 

==============================

//殼體3 - 2維數組
如果返回類看起來像這樣

public class TestResult 
    { 
     public string Key = "myKey"; 
     public string Message = "myMessage"; 
     public string[][] fields; 
    } 

和實現看起來像這樣

string[] a1 = { "fname", "varchar(32)", "bob"}; 
      string[] a2 = { "lname", "varchar(50)", "smithersonsonson" }; 
      string[] a3 = { "age", "varchar(32)", "40" }; 

      r.fields = new string [][]{a1,a2,a3}; 
      return r; 

然後我得到了我期望在瀏覽器

{"GetStringArrayResult":{"Key":"myKey", 
         "Message":"myMessage", 
          "fields":[ 
        ["fname","varchar(32)","bob"], 
        ["lname","varchar(50)","smithersonsonson"], 
        ["age","varchar(32)","40"] 
       ] 
      } 
} 

==============================

你會發現,我不是JSONifying任何東西。我簡單地返回r,它得到了 JSONP由wcf。

我學會了這個艱難的方式,因爲我試着JSON它,然後WCF雙JSON'ed它真的使結果醜陋。用戶error.fine。

==============================

所以下一步是使複雜的對象,以便我們沒有把所有這些陣列掛在身邊。

//殼體4 - 單個嵌入對象

所以,如果我定義一個簡單的類這樣

public class fieldd 
    { 
     public string fieldName = ""; 
     public string datatype = ""; 
     public string value = ""; 

     public fieldd(string _fn, string _dt, string _v) 
     { 
      fieldName = _fn; 
      datatype = _dt; 
      value = _v; 
     } 
    } 

和,如果我的結果類型看起來像這樣

公共類的TestResult {

public string Key = "myKey"; 
    public string Message = "myMessage"; 
    public fieldd field ; 

} 

和我的執行看起來像這樣

r。field = new fieldd(「name」,「varchar(32)」,「bob」); // return r;


谷歌報告
ERR_CONNECTION_RESET

IE9報告
•Internet連接已丟失。
•網站暫時不可用。

我的預期是什麼這個

{"GetStringArrayResult":{"Key":"myKey", 
         "Message":"myMessage", 
          "field":{ 
        "fieldName":"name". 
        "datatype":"varchar(32)", 
        "value":"bob" 
       } 
      } 
} 

================================

我覺得我已經非常明顯地證明了wcf在爲嵌入式對象構建JSON時遇到問題。它沒問題瓦特/陣列。

有什麼想法?
有沒有理由複雜的對象不能退回?
我可以關閉wcf的jsonp實現並自己做?

回答

0

我想答案是更復雜......

嘗試很多事情之後,我試着取出構造。成功。 嘗試更多東西之後......對象必須具有帶空白簽名的構造函數。你可以有其他的構造函數,也可以有一個空白的構造函數。

無法使用帶空白簽名的構造函數會導致jsonp邏輯崩潰。這發生在遊標退出你的代碼並在WCF代碼中游動的地方。

我已經在幾個月的過程中多次回到這個問題。 一個例外w /一個不錯的消息會有所幫助,但它是生活...

Greg