Json.net: 我该如何从[WebMethod]返回JObject?

3

我正在测试 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,我应该返回什么?

1个回答

1
为什么不直接返回对象,将 JSON 序列化留给底层基础设施呢?
public class MyModel
{
    public string Value { get; set; }
}

在你的 Web 方法中:

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

1
我宁愿返回纯JSON,因为底层基础设施并不特别简单。我还希望返回字典和数组,其中字典将包含数组中频繁出现的项,以便我可以减小JSON的大小。 - sh54
@sh54,通过创建自定义对象,您将减少JSON大小,因为您只需要包含所需的属性。 - Darin Dimitrov
1
Json.Net知道如何处理字典、数据表等,以及其他MS序列化程序无法处理的类型... Json.Net被包含在VS2012/.net 4.5的新Web API中是因为这是主要原因。 - Tracker1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接