你可以虛擬轉換器加到什麼也不做有問題的性質:
public class NoConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
// Note - not called when attached directly via [JsonConverter(typeof(NoConverter))]
throw new NotImplementedException();
}
public override bool CanRead { get { return false; } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanWrite { get { return false; } }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
然後將其連接到使用[JsonConverter(typeof(NoConverter))]
財產。這樣做後,JsonConverter
屬性的轉換器取代了全局指定的轉換器,但由於CanRead
和CanWrite
都返回false,因此不執行轉換。對於枚舉集合,可以使用[JsonProperty(ItemConverterType = typeof(NoConverter))]
。
舉例來說,如果你定義的類型:
public enum Foo { A, B, C }
public class RootObject
{
[JsonConverter(typeof(NoConverter))]
public Foo FooAsInteger { get; set; }
public Foo FooAsString { get; set; }
}
然後
var root = new RootObject { FooAsInteger = Foo.B, FooAsString = Foo.B };
var json = JsonConvert.SerializeObject(root, Formatting.Indented, new StringEnumConverter());
Console.WriteLine(json);
產生輸出
{
"FooAsInteger": 1,
"FooAsString": "B"
}
樣品fiddle。
來源
2016-09-28 06:00:41
dbc
理想情況下,您只應修飾所需的「屬性」而不是全局設置 –
您是否想要退出特定屬性或特定枚舉? – dbc
@dcb對於特定的屬性,可能通過使用屬性。 – orad