wcf jsonp返回复杂类型

时间:2014-05-09 19:48:10

标签: c# wcf jsonp

我需要我的wcf应用程序返回复杂类型

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

案例1只是2个字段。没有必要浪费任何人的时间

==============================
// case 2 - 1 dim array

如果返回类型如下所示

  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 dim array
如果返回类看起来像这样

   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");    //返回r;


谷歌报道
 ERR_CONNECTION_RESET

ie9报告
•互联网连接已丢失 •网站暂时无法使用。

我的期望是这个

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

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

我觉得我已经相当地证明了wcf在为嵌入式对象构建JSON时遇到了问题。它很好w /数组。

任何想法?
是否有某种原因导致复杂的物体无法返回?
我可以关闭wcf的jsonp实现并自己动手吗?

1 个答案:

答案 0 :(得分:0)

我希望答案更复杂......

尝试了很多东西之后,我尝试取出构造函数。成功。 在尝试了更多的东西之后......对象必须有一个带有空白签名的构造函数。你可以有其他构造函数,也只有一个空白构造函数。

如果没有带空签名的构造函数,将导致jsonp逻辑崩溃。这在光标退出代码并在某处的WCF代码中游动后发生。

我在几个月的时间里多次回到这个问题。 一个好消息的例外会有所帮助,但这就是生活......

格雷格