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

时间:2015-07-30 11:02:46

标签: c# .net json.net

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

我可以写一个解决方法:

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

public string MyValueForJson {get{return MyValue;}

但这是最后的手段。有没有什么方法 - 除了自定义转换器等 - 表示我不希望在反序列化期间填充该字段?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我认为你可以在类上放置[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; }
    }