【问题标题】:wcf jsonp returning complex typewcf jsonp 返回复杂类型
【发布时间】:2014-06-27 16:13:26
【问题描述】:

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

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

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

===============================
//case 2 - 1 dim 数组

如果返回类型是这样的

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

实现(sn-p)看起来像这样

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

我得到了我的期望

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

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

//case 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"]
                ]
            }
}

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

你会注意到我没有对任何东西进行 JSON 化。我只是返回 r 并得到 由 wcf 编译的 JSONP。

当我尝试将其 JSON 化,然后 WCF 对其进行双重 JSON 处理时,我以艰难的方式了解到这一点,这确实使结果变得丑陋。用户错误。很好。

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

所以下一步是拥有复杂的对象,这样我们就不会有所有这些数组。

//案例 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 时遇到了问题。它可以很好地使用数组。

有什么想法吗?
是否有某种原因无法返回复杂对象?
我可以关闭 wcf 的 jsonp 实现并自己做吗?

【问题讨论】:

    标签: c# wcf jsonp


    【解决方案1】:

    我希望答案更复杂...

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

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

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

    格雷格

    【讨论】:

      猜你喜欢
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      相关资源
      最近更新 更多