C# 返回不需要的json格式的Web Api
方法:C# 返回不需要的json格式的Web Api,c#,asp.net,.net,asp.net-web-api,C#,Asp.net,.net,Asp.net Web Api,方法: [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 = "sele
[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}]"
响应:
[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}]"
期望的响应:
[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',vmpowerstatus:'test'…}]
,因此不需要自己序列化结果。只需返回要序列化的对象或可枚举对象
如果需要自定义序列化,可以在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'";
}
如果您使用默认序列化程序,只返回ds.Tables[0]作为方法,会发生什么情况?@MarcusHöglund然后我必须将方法的返回类型更改为
Datatable
,但我并不总是返回Datatable。对于eg;在catch中,我返回一个具有两个属性ID的对象,MSGU可以尝试使用返回类型IHttpActionResult,然后执行“return Ok(ds.Tables[0]);”所需的响应是无效的json格式。我知道,回复实际上是我们想要的格式。但是我们的客户端在NodeJS中遇到了一些问题。解析字符串后,他无法访问属性:parsedvariable[0]//给他“[”