C# 词典中的宾语是什么<;字符串,对象>;当使用JavaScriptSerializer反序列化Json时?

C# 词典中的宾语是什么<;字符串,对象>;当使用JavaScriptSerializer反序列化Json时?,c#,.net,json,C#,.net,Json,我知道什么是JSON,但我不明白当你反序列化一个简单的JSON属性/值对时,一个由一堆属性/值对组成的字符串,如:{“fileName”:“SomeName”,FilePath:“SomePath”}那么反序列化后字典中的对象和字符串代表什么 这里所有的是一个键/值对,对我来说是一个对象,但是字典中的字符串是什么,键对吗?但是什么类型的键,为什么我需要一个字典来反序列化它?为什么不只是列表和对象将只包含你的键/值对?或者可能是列表,它将与对象相同,但你使用的是自定义类型 我只是想了解当反序列化到

我知道什么是JSON,但我不明白当你反序列化一个简单的JSON属性/值对时,一个由一堆属性/值对组成的字符串,如:
{“fileName”:“SomeName”,FilePath:“SomePath”}
那么反序列化后字典中的对象和字符串代表什么

这里所有的是一个键/值对,对我来说是一个对象,但是字典中的字符串是什么,键对吗?但是什么类型的键,为什么我需要一个字典来反序列化它?为什么不只是列表和对象将只包含你的键/值对?或者可能是列表,它将与对象相同,但你使用的是自定义类型

我只是想了解当反序列化到字典时,反序列化后字典中的字符串和对象是什么。更重要的是,字典中的字符串是什么

我想我甚至不需要在这里输入一个,对吧?因为这里没有根对象,只有键/值(属性/值)对,所以对每个json属性/值都不合适?

{“fileName”:“SomeName”,FilePath:“SomePath”}
是一个具有3个属性的对象。由于JavaScript中的对象本质上是属性的字典,所以在其他语言中表示它们的最明显的方式是相应的字典/哈希表

在.Net中,它是
字典
,因为属性的名称始终是字符串,但值可以具有JSON序列化支持的任何类型(字符串、布尔、数组、对象或数字)


因此,
new JavaScriptSerializer().DeserializeObject(“{\”fileName\“:\”SomeName\”,“\”FilePath\“:\”SomePath\”)
的结果是一个
Dictionary
类型的对象,其中包含对象的所有2个属性列表:字符串键“fileName”,对应值为“SomeName”(类型字符串,作为对象存储在字典中),以及值为“SomePath”的“FilePath”。

从JSON的角度来看,
{“fileName”:“SomeName”,FilePath:“SomePath”}
表示具有给定属性和相应值的对象。您还必须注意,在java脚本中,每个对象本质上都是一个字典/映射,但是JSON表示中没有字典数据类型——JSON规范使用术语
object
来表示名称/值对的集合。引自:

JSON构建在两种结构上:

名称/值对的集合。在各种语言中,这是作为对象、记录、结构、字典、哈希表、键控列表或关联数组实现的

值的有序列表。在大多数语言中,这是作为数组实现的, 向量、列表或序列

谈到反序列化,JS中的反序列化无论如何都是一个对象(也是一个字典,因为JS对象就是这样的)。谈到对C#的反序列化,他说JSON可以反序列化为映射到相同JSON形式的不同类型。例如,所述JSON可以被反序列化为
字典
或具有名称
文件名
文件路径
的字符串属性的类实例(或者它可以是
哈希表
,或者它可以是具有多个属性但只有对应的两个属性被标记为序列化的结构/类)


因此,通常情况下,如何使用特定的反序列化程序将决定反序列化后的类型-AFAIK、.NET提供的序列化程序接受要反序列化的类型并生成该类型的实例。对于
Dictionary
反序列化,JSON.NET就是答案-请参见

JSON,严格来说,它不定义对象的顺序
[1,2,3]
可能会反序列化为一个列表,但
{k:v}
不是一个列表。这是一个映射。实际上,这是我在上面的示例json中的一个json对象…具有一系列属性…这是一种查看它的方式,是的。好吧,所以我的字典中只有一个条目。这里只有一个对象,但是字符串键包含什么?没有什么?空字符串?请参阅我对调用结果的编辑(您可能也应该获取LINQPad并自己尝试一下…)我更愿意利用JavaScriptSerializer,而不是使用整个库来完成一些简单的事情,比如从json中获取一个只具有一组属性的对象。一级没有嵌套树或任何内容。我不喜欢使用JSON.NET这样的大型第三方框架,直到事情变得如此复杂,我不得不这么做。对于现有的JavaScriptSerializer,这必须很简单,而不必在本例中引用整个库,如JSON.NET。@user1286569,是的-我同意u,但我对使用
JavaScriptSerializer
也有点不同,因为MS曾经试图使其过时()基于替代数据协定的序列化程序需要在转换时指定类型。我们希望.NET4.5通过引入
System.Json
-