我知道[JsonIgnore]
完全忽略属性,我知道ShouldSerializePropertyName
给出了条件序列化,但我找不到任何标记属性来正常序列化为JSON,但在反序列化期间没有设置。
我可以写一个解决方法:
[JsonIgnore]
public string MyValue{get;set;}
public string MyValueForJson {get{return MyValue;}
但这是最后的手段。有没有什么方法 - 除了自定义转换器等 - 表示我不希望在反序列化期间填充该字段?
答案 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; }
}