【问题标题】:How to return JObject as json object from WebServices如何从 WebServices 将 JObject 作为 json 对象返回
【发布时间】:2017-11-14 19:52:51
【问题描述】:

我有一个巨大的 Jobject 类型的数据集,格式如下

{
    "key_1": {"id":"1", "name":"some1", ....},
    "key_2": {"id":"", "name":"some2", .....}
}

我使用以下代码创建了这样的对象结构:

JObject res = new JObject();
JObject jo = new JObject();
jo.Add("id", "1");
jo.Add("name", "some1");
res.Add("key_1", jo);

等等;

我有一个 webservice 方法,它的返回类型对象和属性为

[WebMethod][ScriptMethod(ResponseFormat = ResponseFormat.Json)]

如何在 ajax 请求中将此数据作为对象返回。我试过了

res.ToObject() // 由于 html 对象标记,在对象周围添加了正确的大括号 
但它在客户端返回空数组集合,但我的期望是得到如上所述的结果(a适当的对象)。我应该如何返回 res 以获得所需的 json 输出

【问题讨论】:

  • 恕我直言,JObject 不是 Web 服务的理想返回类型,即使在引擎盖下它或多或少是一个字典,它也使得工具(swagger 等)难以自动记录 api,并且可能为消费者增加了额外的复杂性。您可以在内部使用 JObject,但可能以 Dictionary 的形式返回。只是一个想法。
  • IDictionary 不能按照stackoverflow.com/a/13841497/6480144进行序列化
  • 啊,当然,我忘了。对困惑感到抱歉。 @Mayur-Patil。

标签: c# asp.net web-services json.net


【解决方案1】:

已编辑 - 谢谢布赖恩
可以做的事情和你应该做的事情是有区别的......

返回 JObject 的正确方法取决于您...创建代表它们的真实对象...创建可以序列化的键/值对...

您不想做的只是将 JSON 写到响应中...但是因为这就是您的要求...这就是您将如何做到的。

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void GetObject()
{
    string json = GetJsonFromDatabase();
    HttpContext.Current.Response.Write(json);
}

请注意,您的方法必须返回 void 并且您正在将 json 直接写入响应流。超级脏……超级丑……请不要这样做。您还必须手动将其转换为 js 端的对象。

【讨论】:

  • 除了他没有使用 Web API,他使用的是 ASMX。
  • 通过序列化字典解决了问题 & 后来使用 newtonsoft seralizeobject 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多