JSON REST Web api的文本编码标准是什么?

时间:2012-06-20 18:20:33

标签: json rest encoding asp.net-mvc-4 asp.net-web-api

我正在使用MVC4构建Web API,并且有些请求返回文本块,这些文本可以包含行制动器,特殊字符,中文和西班牙文本。我应该如何转义/编码通过api发送的信息?

2 个答案:

答案 0 :(得分:3)

使用UTF-8编码的这种情况,作为简化示例

public JsonResult Find(string term) 
{
    var items = service.Find(term);
    return Json(items,"application/json; charset=utf-8", JsonRequestBehavior.AllowGet);
}

答案 1 :(得分:1)

使用UTF-8编码文本,使用JSON和HTTP编码。这就够了。当您有换行符和其他特殊字符时,HTTP编码很有用。

Standart在这里 http://www.ietf.org/rfc/rfc4627.txt?number=4627

但是你应该知道不同的json格式化程序在特殊情况下可能会产生稍微不同的结果,例如在如何编码日期/时间的问题中。

UTF-8和DataContractJsonSerializer的示例:

        // Create a User object and serialize it to a JSON stream.
        public static string WriteFromObject()
        {
            //Create User object.
            User user = new User("Bob", 42);

            //Create a stream to serialize the object to.
            MemoryStream ms = new MemoryStream();

            // Serializer the User object to the stream.
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
            ser.WriteObject(ms, user);
            byte[] json = ms.ToArray();
            ms.Close();
            return Encoding.UTF8.GetString(json, 0, json.Length);

        }

        // Deserialize a JSON stream to a User object.
        public static User ReadToObject(string json)
        {
            User deserializedUser = new User();
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
            DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUser.GetType());
            deserializedUser = ser.ReadObject(ms) as User;
            ms.Close();
            return deserializedUser;
        }