[英]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.