A. jsON真的比XML好很多嗎
JSON和 XML非常的相似。它們都試圖通過建立一種簡單,人類可讀的格式存儲數據。直到最近,XML被用於任何類型的需要迅速發送一小部分數據的系統中。比如那些從伺服器獲取信息的API。在大多數情況下,XML做的很好。那麼,為什麼還需要JSON?
JSON在設計時是為Web考慮的,所以它在javaScript中真的很好用。使用類似 eval()的方法(使用 jQuery會很大提升這個方法的表現),你可以很容易使用JSON中的信息填充一個Web頁面。
JSON聲稱相對XML有許多好處,包括:
容易閱讀;解析速度更快;佔用空間更少
盡管容易閱讀是很難衡量的一點,但其它兩點是很顯然的。
很容易看出,存儲相同的信息JSON確實需要更少的空間。快速瀏覽一下JSON的網站後,你會發現幾個比較這兩種格式的例子。從頁面上可以很容易的看出:描述同樣的信息JSON比XML少佔用很多的空間。例如:第一個例子(詞彙表結構)存儲為XML需要502個字元,而存儲為JSON只需345字元(大約少佔30%的空間)。
對於「解析速度更快」這一點,有點難以測試。對此我寫了一個快速測試來看看我能以多快的速度來把一個XML和JSON字元串轉化為Java對象。
對於XML解析,我使用Java內置的 SAX解析器。SAX解析器允許遍歷XML文件,並把XML值賦給對象中適當的欄位。這種方法相對JSON解析是比較繁瑣的,但不是沒有道理。
JSON的解析,我使用了GSON庫,只需用一行代碼就可以很容易地在JSON和java對象之間轉換,只需要一個這個類的定義就可以了(如Book類,欄位名和JSON中的對應)。不過這使得這個類變數和JSON實例綁定到了一起。一旦類的實例名稱或JSON欄位名有了變化,將會出現問題。
B. 在WebApi中返回一個JSON格式的數據,如何到客戶端就變了
轉載 在使用Web Api的時候,有時候只想返回JSON;實現這一功能有多種方法,本文提供兩種方式,一種傳統的,一種作者認為是正確的方法。
JSON in Web API – the formatter based approach
只支持JSON最普遍的做法是:首先清除其他所有的formatters,然後只保留JsonMediaTypeFormatter。
有了HttpConfiguration的實例,你將會很簡單的清除所有formatters,然後重新添加JsonMediaTypeFormatter。
實現代碼如下:
configuration.Formatters.Clear();
configuration.Formatters.Add(new JsonMediaTypeFormatter());這種方式雖然可以實現功能,但是所有的conent negotiation還是會發生,這就會產生以下額外的開銷了。因為,你已經知道要返回的結果了,也只想返回Json,其他的content negotiation都不需要了。
下面的方法可以很好的解決這個問題。
JSON in Web API – the conneg based approach
最好的方法是使用自定義的只返回Json Result的content negotiation代替Web Api中默認的content negotiation。
Conneg通過實現IContentNegotiator的Negotiator方法實現擴展。Negotiator方法返回ContentNegotiationResult(它包裝了你選擇的headers和formatter)。
下面的方法通過傳遞一個JsonMediaTypeFormatter給自定義的conneg negotiator,讓它一直返回applicaton/json 的content-type以及JsonMediaTypeFormatter。這種方法避免了每次請求都要重新創建一次formatter。
代碼如下:
public class JsonContentNegotiator : IContentNegotiator
{
private readonly JsonMediaTypeFormatter _jsonFormatter;
public JsonContentNegotiator(JsonMediaTypeFormatter formatter)
{
_jsonFormatter = formatter;
}
public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
{
var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));
return result;
}
}接下來,你需要在HttpConfiguration實例上注冊你的新的實現機制:
var jsonFormatter = new JsonMediaTypeFormatter();
//optional: set serializer settings here
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
通過替換默認的DefaultContentNegotiator,我們使用我們自定義的JsonContentNegotiator,它只支持Json,而且可以馬上返回。
如果你想更深入的了解Content Negotiation的知識,你可以查看作者的這篇文章。
總結
通過使用自定義的JsonContentNegotiator替換系統默認的DefaultContentNegotiator,很好的實現Web Api只返回Json的功能,而且沒有額外的開銷。
C. c#mvc中的webapi怎麼迫使服務端返回字元串
web api 默認的已 xml 格式返回數據
現在開發一般都是以 json 格式為主
下面配置讓 webapi 默認返回 json ,在需要返回 xml 時只需要加一個查詢參數 datatype=xml 即可返回 xml 格式數據
配置如下:
1.新建 一個 mvc webapi 項目 (framework4.0)
2.找到默認的 WebApiConfig.cs 文件
3.修改 WebApiConfig.cs 文件
<span style="font-family: Arial, Helvetica, sans-serif;">using System;</span>
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Formatting;
using System.Web.Http;
namespace MvcWebApi
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
.......
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
//默認返回 json
GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(
new QueryStringMapping("datatype", "json", "application/json"));
//返回格式選擇 datatype 可以替換為任何參數
GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(
new QueryStringMapping("datatype", "xml", "application/xml"));
}
}
}
4.修改默認路由規則 WebApiConfig.cs 文件中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Formatting;
using System.Web.Http;
namespace MvcWebApi
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
//新加的規則
config.Routes.MapHttpRoute(
name: "DefaultApi2",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
//新加的規則
config.Routes.MapHttpRoute(
name: "DefaultApi1",
routeTemplate: "api/{controller}/{action}",
defaults: new { id = RouteParameter.Optional }
);
//默認路由
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
。。。。。
}
}
}
5.添加測試 action
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace MvcWebApi.Controllers
{
public class ValuesController : ApiController
{
/// <summary>
/// web api 默認將以 get 開頭的只支持 get 請求,post 開頭的支持支 post 請求
/// </summary>
/// <returns></returns>
[System.Web.Http.HttpGet]
[System.Web.Http.HttpPost]
public MyClass GetMyClass()
{
return new MyClass()
{
id=1111,
name="張三",
time=DateTime.Now
};
}
}
public class MyClass
{
public int id { set; get; }
public string name { set; get; }
public DateTime time { set; get; }
}
}
6.測試
請求地址:http://localhost:61667/api/values/getmyclass
響應內容:
{"id":1111,"name":"張三","time":"2015-09-29T16:43:07.4731034+08:00"}
請求地址:http://localhost:61667/api/values/getmyclass?datatype=xml
響應內容:
<MyClass><id>1111</id><name>張三</name><time>2015-09-29T16:43:45.3663004+08:00</time></MyClass>
D. json和xml的區別
xml是重量級的,json是輕量級的
xml可讀性較好
json的編碼相對比較容易,json的解碼難度基本為內0
json的傳輸速度遠遠快於容xml
xml和json都用在項目交互下, xml多用於做配置文件, json用於數據交互
希望 可以幫助正在閱讀的你!!!
E. .net中MVC web項目和webapi有啥區別
首先要重點說的是,Web API是一種無限接近於RESTful風格的輕型框架,且不是微軟提出來的,微軟在.NET上實現了這中框架—http://Asp.Net
Web API,所以「微軟包裝」是一個極大的偏見。
就應用市場時間而論,MVC普及市場的時間比Web API時間早。為什麼MVC提出來了,且都被大家公認是一種經典的web站點實現架構,為什麼還要搞Web API呢?
這兩年什麼炒得最火熱?互聯網。在網路技術不斷更新和替代的過程,網路不斷普及。互聯網產品只要你有技術,就可以做。但要說明的是,互聯網產品的用戶不再是一小部分人群,除了潛在用戶,你需要面對的是龐大的上網人群和開發者。這時候你要考慮你的WEB伺服器是否能夠支持這么多的用戶,節省一點點傳輸數據的帶寬都能夠讓你的伺服器輕松不少,除此之外,你還要考慮你的潛在用戶變成你的真實用戶的某刻時刻,你的伺服器是否能夠順利支撐。
面對用戶,你要考慮你的產品是否能夠讓用戶使用起來感覺很「爽」,你要把用戶體驗放在首位,那麼你的產品首先功能上必須穩定,不然即使有再好的創意,再耐心的用戶總會使用其它產品替代你的產品。
面對開發者,你想要把某些功能開放,這時候你必須要開放某些介面。有人會說,我也可以使用MVC來開放這些介面,沒錯是可以,但是繞遠道給你帶來的是更大的代價。
Web API 和 MVC可以說是兩個不同的東西。Web API更傾向於基於HTTP協議的服務,直接返回用戶的數據請求。MVC是建站的一種框架,傾向於返回用戶的頁面請求。
我總結了以下 http://ASP.NET Web API 的特性,更能說明Web API是一種數據請求框架:
http://ASP.NET
Web API 可以根據請求報文來返回的相應數據格式。包括JSON和XML。
http://ASP.NET
Web API 單獨做數據請求和MVC做頁面請求可以讓Web前端和後台更好的解耦,減少開發難度。
Web API 可以更好地用在移動端網頁、桌面端網頁或者桌面程序。
Web API 的宿主可以選擇多樣:WebHost,,ConsoleHost,甚至是windows Services。
類似可以理解成ashx和webform的區別
F. webapi 如何返回json字元串
方法一:(改配置法)
找到Global.asax文件,在Application_Start()方法中添加一句內:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
// 使容api返回為json
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}