在 JSON.Net 中覆寫 JsonProperty 屬性的序列化行為
在 ASP.Net MVC 中使用 Json.Net 序列化 JSON 時,可以使用 [JsonProperty]
屬性來自訂屬性名稱。但是,在某些情況下,您可能想要忽略此屬性並使用原始屬性名稱進行序列化。
為此,可以使用自訂契約解析器。契約解析器決定 JSON.Net 如何將物件序列化為 JSON。以下是如何建立一個忽略 [JsonProperty]
屬性的契約解析器:
<code class="language-csharp">class LongNameContractResolver : DefaultContractResolver { protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { // 基类创建具有简短名称的属性 IList<JsonProperty> list = base.CreateProperties(type, memberSerialization); // 使用原始名称覆盖属性名称 foreach (JsonProperty prop in list) { prop.PropertyName = prop.UnderlyingName; } return list; } }</code>
要使用契約解析器,請實例化它並將其傳遞給 JsonSerializerSettings
:
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Formatting = Formatting.Indented; settings.ContractResolver = new LongNameContractResolver();</code>
最後,將這些設定傳遞給 JsonConvert.SerializeObject
以序列化物件:
<code class="language-csharp">string json = JsonConvert.SerializeObject(obj, settings);</code>
此自訂契約解析器將有效地忽略 [JsonProperty]
屬性,並使用其原始名稱序列化屬性,即使 JsonProperty
屬性指定了較短的名稱。
以上是如何覆寫 JSON.Net 中的「JsonProperty」屬性序列化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!