簡體   English   中英

JSON.NET(WebApi2)-序列化屬性,但在反序列化期間跳過

[英]JSON.NET (WebApi2) - Serialize property, but skip during deserialization

我知道[JsonIgnore]會完全忽略屬性,我知道ShouldSerializePropertyName會提供條件序列化,但是我找不到任何東西來標記可以正常序列化為JSON的屬性,但未在反序列化期間設置。

我可以寫一個解決方法:

[JsonIgnore]
public string MyValue{get;set;}

public string MyValueForJson {get{return MyValue;}

但這是不得已的方法。 除了自定義轉換器等以外,還有什么方法可以表示我不希望在反序列化期間填充該字段?

據我了解,您想序列化具有json字符串中所有屬性的對象,但在對該字符串進行反序列化時僅檢索選定的屬性。

如果是這種情況,我有一個類似的要求,即我創建了BaseType和DerivedType類,然后我將派生類型序列化為Json字符串,而反序列化則需要在Base類型實例中進行。 所以寫了這段代碼:

    using System.Web.Script.Serialization;

    public static TB CastToBase<T, TB>(this T derivedTypeInstance) 
        {
            var serializer = new JavaScriptSerializer();
            var baseTypeInstance = serializer.Deserialize<TB>(serializer.Serialize(derivedTypeInstance));
            return baseTypeInstance;
        } 

我認為您可以將[JsonObject(MemberSerialization.OptIn)]屬性放在類上,該屬性要求明確聲明要序列化的屬性。 然后,您可以在要正常進行序列化的屬性上同時使用[JsonProperty]和[JsonIgnore],但在反序列化時忽略。

例:

    [JsonObject(MemberSerialization.OptIn)]
    private class UserData
    {
        [JsonProperty]      
        public string Token { get; set; }

        [JsonProperty]
        public string Username { get; set; }

        [JsonIgnore]
        [JsonProperty]
        public string Password { get; set; }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM