簡體   English   中英

JavaScriptSerializer默認情況下序列化為JSON嗎?

[英]JavaScriptSerializer serializes to JSON by default?

這不是很奇怪嗎?
看起來私有方法實際上接受了允許設置JavaScript序列化模式的參數,而不是默認的(JSON),但它從未公開...為了使這種情況更加奇怪,Serialize()愉快地接受字符串並將其編碼為JavaScript字符串(轉義比JSON標准要求的要安靜一些),因為DateTime將被編碼為JSON。

我很困惑。 是否在某個地方進行了實際的JavaScript序列化的派生類?

我沒有看到有關字符串行為的任何奇怪信息。 字符串的JSON表示形式只是一個字符串。

在序列化具有屬性(而不是簡單類型)的對象之前,您實際上看不到任何JSON表示法。

JSON是實際的javascript ,因此我不確定您要查找的是哪種序列化。

var s = new JavaScriptSerializer();
Console.WriteLine(s.Serialize(DateTime.Now));
Console.WriteLine(s.Serialize("I like things & stuff ' \" ."));
Console.WriteLine(s.Serialize(3.14));
/* Should serialize to JSON object */
Console.WriteLine(s.Serialize(new { String = "I like things & stuff ' \" .", Date = DateTime.Now, PI = 3.14 }));
/* Should serialize to array */
Console.WriteLine(s.Serialize(new object[] { "I like things & stuff ' \" .", DateTime.Now, 3.14 }));

輸出:

"\/Date(1316374642273)\/"
"I like things & stuff \u0027 \" ."
3.14
{"String":"I like things & stuff \u0027 \" .","Date":"\/Date(1316374642278)\/","PI":3.14}
["I like things & stuff \u0027 \" .","\/Date(1316374642280)\/",3.14]

有趣的日期格式有一些背景知識

“ Javascript”序列化格式似乎是第一次將日期序列化為JSON時遺留下來的代碼。 實際使用值的唯一地方是SerializeDateTime我想團隊會根據鏈接文章確定這是一個壞主意之后才將這些方法私有化:

我們嘗試的第一件事是將Date構造函數注入JSON字符串中。 由於很多原因,這是一個(非常)壞主意。 首先,它根本不符合JSON規范。 其次,任何在解析輸入之前先驗證其輸入的JSON解析器都會發出類似的聲音。 最后,它建立了一個先例:為什么日期允許而不是任意類型允許使用? 這只會破壞JSON的目的。

如果您真的只需要將單個DateTime序列化為Javascript,就沒有理由不能竊取這兩行代碼,但是,如果要序列化一個復雜的對象,則有正當的理由,您不應該這樣做。

public string SerializeDateTime(DateTime datetime)
{ 
    DateTime time = new DateTime(0x7b2, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    DatetimeMinTimeTicks = time.Ticks;

    var sb = new StringBuilder();
    sb.Append("new Date(");
    sb.Append((long) ((datetime.ToUniversalTime().Ticks - DatetimeMinTimeTicks) / 0x2710L));
    sb.Append(")");
    return sb.ToString();
}  

如果您需要的是在網頁上實際使用ASP.NET的序列化日期,而您沒有使用ASP.NET AJAX,則此問題涵蓋了該問題: 如何格式化Microsoft JSON日期?

序列化數據通常會將其轉換為字符串/流,因此可以將其存儲在數據庫中或通過網絡傳輸。 Javascript是一種編程語言。 JSON是Javascript的子集 ,它表示對象,數組,字符串和數字為可以用字符串表示的文字。 可以說JSON是Javascript。 如果要將對象圖序列化為Javascript, 則為 JSON。 您期望什么行為? 雖然JavaScriptSerializer可用於轉義字符串或序列化DateTime,但我認為預期的用途是序列化對象圖。 而且,如果它確實轉義了比JSON所需的字符更多的字符,那么我確信它仍然是有效的JSON。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM