【发布时间】: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 实现并自己做吗?
【问题讨论】: