簡體   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