C#是一個強類型語言,它允許程序員通過定義類來描述對象,對象的屬性通常由公共字段或方法來表示。不過,在一些情況下,開發人員可能需要將對象的屬性作為JSON數據進行序列化和反序列化。這個時候就可以使用C#屬性和JSON屬性相互映射。
using Newtonsoft.Json; public class Person{ [JsonProperty("name")] public string Name {get; set;} [JsonProperty("age")] public int Age {get; set;} [JsonIgnore] public string Secret {get; set;} }
在上面的例子中,我們定義了一個Person類,并使用JsonProperty屬性將每個屬性映射到JSON中的相應鍵。JsonProperty屬性的參數指定了JSON中的鍵名。當我們在序列化Person實例時,它將會被編碼成一個JSON字符串,如下所示:
{ "name": "Tom", "age": 25 }
注意,我們使用了屬性名稱的序列化器插件(Json.NET)來進行序列化。 這樣,我們可以輕松地實現細粒度的控制,例如跳過不需要序列化的屬性 (例如“Secret”屬性,使用JsonIgnore屬性注解)。
當我們反序列化JSON字符串時,反序列化器(Json.NET)將自動使用JsonProperty屬性來將JSON數據映射到C#屬性。 反序列化的代碼如下所示:
string json = "{\"name\": \"Tom\",\"age\": 25}"; Person person = JsonConvert.DeserializeObject<Person>(json);
現在,person實例包含了來自JSON字符串的所有屬性(Name和Age),而不包含Secret屬性。您可以嘗試實驗一下并修改JSON字符串中的“Name”鍵的值,這個值將會被映射到C# Person類的“Name”屬性中。
因此,C#屬性和JSON屬性之間的相互映射提供了一種輕松的方式來序列化和反序列化C#對象。 這不僅使代碼更加易于理解,而且也為我們提供了更好的控制對象之間的序列化方式!