【问题标题】:Json.net: How can I return JObject from a [WebMethod]?Json.net:如何从 [WebMethod] 返回 JObject?
【发布时间】:2011-01-13 11:56:11
【问题描述】:

我正在测试json.net。我想使用它的 linq-to-json 语法从属性为 [WebMethod] 的函数返回 json,但我遇到了错误。

例如,如果我在后面的代码中使用

[WebMethod, ScriptMethod(UseHttpGet = true)]
public static JObject GetStuff() {
    return new JProperty("string", "value");
}

被以下javascript调用:

  PageMethods.GetStuff(/* parameters */, function(data) {
      // do stuff with data
  });

我收到错误“无法访问 Newtonsoft.Json.Linq.JValue 上的子值”。

我应该返回什么来确保我的 javascript 数据对象被 JSON 填充?

【问题讨论】:

    标签: c# asp.net json json.net webmethod


    【解决方案1】:

    为什么不简单地返回对象并将 JSON 序列化留给底层基础架构:

    public class MyModel
    {
        public string Value { get; set; }
    }
    

    在您的网络方法中:

    [WebMethod, ScriptMethod(UseHttpGet = true)]
    public static MyModel GetStuff() {
        return new MyModel {
            Value = "some value"
        };
    }
    

    【讨论】:

    • 我宁愿返回纯 JSON,因为底层基础设施并不是特别简单。我还希望返回一个字典和一个数组,其中字典将包含数组中经常出现的项目,这样我就可以减少 JSON 的大小。
    • @sh54,通过创建自定义对象,您将减少 JSON 大小,因为您将只包含您需要的属性。
    • Json.Net 知道如何处理字典、数据表等以及 MS 序列化程序阻塞的其他类型...... Json.Net 开箱即用的主要原因是带有 VS2012/.net 4.5 的新 web api ...
    猜你喜欢
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多