Мне нравится придерживаться атрибутов на этом, вот тот метод, который я использую, когда вам нужно десериализовать свойство, но не сериализуйте его или наоборот.
ШАГ 1 - Создайте пользовательский атрибут
public class JsonIgnoreSerializationAttribute : Attribute { }
ШАГ 2 - Создайте пользовательское соглашение об отказе
class JsonPropertiesResolver : DefaultContractResolver
{
protected override List<MemberInfo> GetSerializableMembers(Type objectType)
{
//Return properties that do NOT have the JsonIgnoreSerializationAttribute
return objectType.GetProperties()
.Where(pi => !Attribute.IsDefined(pi, typeof(JsonIgnoreSerializationAttribute)))
.ToList<MemberInfo>();
}
}
ШАГ 3 - добавьте атрибут, в котором сериализация не требуется, но десериализация -
[JsonIgnoreSerialization]
public string Prop1 { get; set; } //Will be skipped when serialized
[JsonIgnoreSerialization]
public string Prop2 { get; set; } //Also will be skipped when serialized
public string Prop3 { get; set; } //Will not be skipped when serialized
ШАГ 4 - Используйте его
var sweet = JsonConvert.SerializeObject(myObj, new JsonSerializerSettings { ContractResolver = new JsonPropertiesResolver() });
Надеюсь, это поможет! Также стоит отметить, что это также игнорирует свойства, когда происходит Deserialization, когда я занимаюсь сортировкой, я просто использую конвертер обычным способом.
JsonConvert.DeserializeObject<MyType>(myString);