繁体   English   中英

Dictionary中的对象是什么 <string, object> 什么时候使用JavaScriptSerializer反序列化Json?

[英]What is the object in Dictionary<string, object> when Deserializing Json using JavaScriptSerializer?

我知道JSON是什么,但我不明白你在一堆属性/值对的字符串中反序列化一个简单的json属性/值对,如下所示: {"fileName":"SomeName, "FilePath":"SomePath"}然后反序列化后字典中的对象和字符串是什么?

我们这里所有的都是一个键/值对,对我来说就是一个对象,但字典中的字符串是什么,关键是什么? 但是什么样的关键,为什么我需要一本字典来反序列化呢? 为什么不只是List和对象只包含您的键/值对? 或者列表与对象相同,但您使用的是自定义类型。

我只想了解何时反序列化为字典,反序列化后字典中的字符串和对象是什么。更多字符串在Dictionary中。

我不认为我甚至需要在这里吗? 因为没有根对象,只有键/值(属性/值)对,所以对每个json属性/值都没有问题?

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

JSON基于两种结构:

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

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

进入反序列化,JS中的反序列化无论如何都是一个对象(也是一个字典,因为这就是JS对象的方式)。 对C#进行反序列化,可以将JSON反序列化为映射到相同JSON格式的不同类型。 例如,可以将所述JSON反序列化为Dictionary<string, string>或具有名称fileNameFilePath字符串属性的类的实例(或者它可以是HashTable或者它可以是具有多个属性但仅仅属性的结构/类相应的两个标记为序列化)。

通常,如何使用特定的反序列化器来决定反序列化后的类型--AFAIK,.NET提供的序列化器接受反序列化的类型并生成该类型的实例。 对于Dictionary<string, string> deserialization,JSON.NET就是答案 - 请参阅如何在ASP.NET中将JSON反序列化为简单的Dictionary <string,string>?

{"fileName":"SomeName, "FilePath":"SomePath"}是一个具有3个属性的对象。由于JavaScript中的对象本质上是属性的字典,因此在其他语言中表示它们的最明显方式是对应的Dictionary / HashTable。

在.Net中,它是Dictionary<string, object>因为propertye的名称始终是string,但是value可以具有JSON序列化支持的任何类型(字符串,bool,数组,对象或数字)。

因此new JavaScriptSerializer().DeserializeObject("{\\"fileName\\":\\"SomeName\\", \\"FilePath\\":\\"SomePath\\"}")结果new JavaScriptSerializer().DeserializeObject("{\\"fileName\\":\\"SomeName\\", \\"FilePath\\":\\"SomePath\\"}")Dictionary<string, object>类型的Dictionary<string, object>包含对象的所有2个属性的列表:字符串键“fileName”,对应值“SomeName”(类型字符串,存储为字典中的对象)和“FilePath”,值为“SomePath”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM