Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何理解JSON rfc7159字符串和字符问题_C#_Json - Fatal编程技术网

C# 如何理解JSON rfc7159字符串和字符问题

C# 如何理解JSON rfc7159字符串和字符问题,c#,json,C#,Json,现在我正在使用C#实现一个JSON序列化工具。我所指的标准是。我不理解本文件第8项(字符串和字符问题)的内容 我构建的JSON序列化工具非常简单。它可以将对象转换为字符串或字符串转换为对象。 我只公开了2个API public string SerializeToJson(object obj); public object DeserializeToObj(string json); 对于序列化,我只负责生成一个字符串(utf16),我不关心将它编码成什么二进制 对于反序列化,在代码级别,

现在我正在使用C#实现一个JSON序列化工具。我所指的标准是。我不理解本文件第8项(字符串和字符问题)的内容


我构建的JSON序列化工具非常简单。它可以将对象转换为字符串或字符串转换为对象。
我只公开了2个API

public string SerializeToJson(object obj);
public object DeserializeToObj(string json);
对于序列化,我只负责生成一个字符串(utf16),我不关心将它编码成什么二进制

对于反序列化,在代码级别,我只接受一个字符串(我不关心从何处读取该字符串),我读取该字符串的每个字符,如果格式不正确,则抛出一个错误

所以我不太理解Json RFC 7159 8.1和8.2。为什么它出现在JSON标准中

<对于一个C*JSON序列化工具,我应该考虑它吗?如果我弄错了,你能告诉我这是什么意思或者给我一个场景吗

对于8.3,当序列化时,我会将其更改为
\\\\\\\\
\\\\\\
\\u005c
\\u005c
\\\\\\\\
。在反序列化中,我读取它们的代码单元进行比较,因此
\\\
\u005c
肯定是相同的,那么8.3是什么意思呢?它是用于序列化还是反序列化?我的理解正确吗?

或者,在序列化时,无论是
\\
还是
\u005c
,是否需要我最终输出相同的内容(例如
\\u005c

您可以通过两个步骤完成序列化。首先是字符串,然后是UTF-8字节。UTF-8是可互换JSON文档所必需的(,它淘汰了RFC 7159)

您只需要在JSON字符串中转义

必须转义的字符:

  • 引号
  • 反向索利多金币
  • 和控制字符(U+0000到U+001F)
序列化后,您可以选择转义引号、反索利多线、索利多线、退格、换行、换行、回车和水平制表符的方式

有一个非常吸引人的“铁路图”来说明这一点


(ASCII与此处无关。)

\
u
0
0
5
c
(按该顺序)组成的输入字符串可以对该字符串中的6个字符中的任何一个进行不同的转义。解码器需要正确处理所有的可能性,编码器不需要满足于任何特定的形式——特别是,您不需要往返。由
\
\组成的字符串同样有六种形式(将
\
转义为
\
\u005c
\u005c
)。在这里,第7节比第8节更相关。请记住三层:字符->JSON字符(转义或非转义)->编码字符的代码点。
public string SerializeToJson(object obj);
public object DeserializeToObj(string json);