【问题标题】:c# return json object from stringc# 从字符串返回json对象
【发布时间】:2014-04-10 12:59:24
【问题描述】:

我有一个数据表,我想将其更改为 json。我是这样使用 json.net lib 的

    [WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public object LoadTotalCallsPerCampignByRangeFilter(string fromDate, string toDate)
            DataTable DTgraph = new DataTable();
            ....
            .... 
            string jsonformatstring = JsonConvert.SerializeObject(DTgraph, Formatting.Indented);
            return jsonformatstring;

那是一个网络服务

然后我尝试像这样从 jquery 中使用它:

 $.getJSON('http://localhost:4025/vmp_webservice.asmx/LoadTotalCallsPerCampignByRangeFilter',
               { fromDate: "01-01-2014", toDate: "09-04-2014" } )
                .done(function (result) {
                    alert("hi");
            });

我检查了 chrome 调试工具 (f12),我可以看到请求和返回的数据,但从未触发警报功能。

这是返回的数据。

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">[
  {
    "Campaign": "default",
    "TotalInBound": 216.0
  },
  {
    "Campaign": "direct",
    "TotalInBound": 10.0
  },
  {
    "Campaign": "Sales",
    "TotalInBound": 151.0
  },
  {
    "Campaign": "Support",
    "TotalInBound": 2.0
  }
]</string>

我看到在我的网络服务中返回的问题是 string formated 而不是 json object

那么我怎样才能返回对象 json 而不是字符串格式的 json?

如果是其他问题,请告诉我

谢谢

【问题讨论】:

  • @FreeAsInBeer 我应该在哪里设置该类型?我看到了我的 c# 代码,它是一个 json.net,它是一个库,

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


【解决方案1】:

如果您希望您的响应被视为 JSON,您需要 set your ContentType:

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/json; charset=utf-8";
HttpContext.Current.Response.Write(jsonformatstring);
HttpContext.Current.Response.End();

【讨论】:

  • 我可以在网络服务asmx 的 c# 代码中编写响应吗?真的吗?
  • 我在 c# 中的函数应该是无效的?还是退货?
  • @user3432257 您应该能够通过使用其完整命名空间路径引用它来写入响应,答案已编辑。您应该使用 void 因为您直接写入响应而不返回任何内容。
  • @user3432257 是的,如果您直接写入响应,则返回 void。
【解决方案2】:

尝试使用 done、always 和 fail 方法进行调试。我的猜测是它试图将字符串解析为 JSON 并失败。您可以将下面的 console.log 替换为 alert

  .done(function() {
    console.log( "second success" );
  })
  .fail(function( jqxhr, textStatus, error ) {
    console.log( error );
  })
  .always(function() {
    console.log( "complete" );
  });

【讨论】:

  • success 和 done 函数是否应该将响应作为参数?
  • 是的,我从 getJSON api 文档页面复制了这个,通常你会接受成功/完成的响应
  • 我的代码与 get/post 无关,它只是 getJSON 方法本身的回调。感谢您的+1。当我说“你的帖子”时,我指的是你上面的问题:)
【解决方案3】:

Webservise 将返回字符串,因为在返回语句之前,您将序列化为字符串并发送到客户端。

string jsonformatstring = JsonConvert.SerializeObject(DTgraph, Formatting.Indented);

因此,在您的消费应用程序中,您必须反序列化回对象,才能查看对象格式。

https://api.jquery.com/jQuery.parseJSON/

【讨论】:

  • @user3432257,太好了,这可能对其他人有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
相关资源
最近更新 更多