JSON.. NET (WebApi2) -序列化属性,但在反序列化期间跳过

本文关键字:反序列化 属性 NET WebApi2 序列化 JSON | 更新日期: 2023-09-27 18:05:44

我知道[JsonIgnore]完全忽略属性,我知道ShouldSerializePropertyName给出条件序列化,但我找不到任何标记属性通常序列化为JSON,但在反序列化期间不设置。

我可以写一个变通方法:

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

但这是最后的手段。除了自定义转换器等之外,是否有某种方式来表示我不希望在反序列化期间填充该字段?

JSON.. NET (WebApi2) -序列化属性,但在反序列化期间跳过

据我所知,您希望在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; }
    }