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字符串中序列化具有所有属性的对象,但在该字符串上反序列化时仅检索选定的属性。
如果是这种情况,那么,我有一个类似的要求,我创建了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; }
}