【问题标题】:Web Api returning undesired format of jsonWeb Api 返回不想要的 json 格式
【发布时间】:2018-10-16 11:43:38
【问题描述】:

方法:

[Route("api/vms/getpowerstatus/{vmsid}")]
[HttpGet]
public string getpowerstatus(string vmsid)
{ 
    Result rs = new Result();
    try
    {
        DataSet ds = new DataSet();
        String timeStamp = GetTimestamp();

        string q = "select vmsid, vmspowerstatus ,vmspowerdatetime from public.vmssnapshot  ";
        ds = vm.GetVMS(q);
        rs.vmsid = vmsid;
        rs.status = "success";

        string json = JsonConvert.SerializeObject( ds.Tables[0] , Formatting.None);
        return json;
    }
    catch (Exception ex)
    {

    } 
}

回应:

"[{\"vmsid\":\"512\",\"vmspowerstatus\":null,\"vmspowerdatetime\":null},{\"vmsid\":\"VMSBhandup98\",\"vmspowerstatus\":null,\"vmspowerdatetime\":null},{\"vmsid\":\"tquwuer\",\"vmspowerstatus\":null,\"vmspowerdatetime\":null},{\"vmsid\":\"VMSBlock\",\"vmspowerstatus\":\"1\",\"vmspowerdatetime\":1539022768},{\"vmsid\":\"uu4443\",\"vmspowerstatus\":\"1\",\"vmspowerdatetime\":1534917021},{\"vmsid\":\"cms_bhandup\",\"vmspowerstatus\":\"1\",\"vmspowerdatetime\":1539022544},{\"vmsid\":\"vmsBolakk\",\"vmspowerstatus\":\"1\",\"vmspowerdatetime\":1539631400}]"

期望的响应:

[{vmsid:'512',vmspowerstatus:'test'.....}]

【问题讨论】:

  • 如果您使用默认的序列化程序,只从方法中返回 ds.Tables[0] 会发生什么?
  • @MarcusHöglund 那么我必须将方法的返回类型更改为Datatable,但我并不总是返回DataTable。例如;在捕获中,我返回一个具有两个属性 ID 和 MSG 的对象
  • 你可以尝试返回类型 IHttpActionResult,然后执行“return Ok(ds.Tables[0]);”
  • 您想要的响应是无效的 json 格式。响应实际上是所需的格式。
  • 我知道。但是我们的客户在节点 js 中遇到了一些问题。解析字符串后,他无法访问属性: parsedvariable[0] // 给他“[”

标签: c# asp.net .net asp.net-web-api


【解决方案1】:

Asp.Net web api serialize your result in json,所以你不需要序列化自己的结果。只需返回要序列化的对象或可枚举的对象。

如果需要自定义序列化,可以在web api配置注册中配置序列化器

public static void Register(HttpConfiguration config)
{
    //Web API routes
    config.MapHttpAttributeRoutes();

    //configure serializer
    config.Formatters.JsonFormatter.SerializerSettings = new Newtonsoft.Json.JsonSerializerSettings();
    config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
    config.Formatters.JsonFormatter.SerializerSettings.DateFormatString = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'";
}

【讨论】:

    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    相关资源
    最近更新 更多