繁体   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