[英]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>
或具有名称fileName
和FilePath
字符串属性的类的实例(或者它可以是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.