你可以添加一个
TypeConverter为
StringId。Json.NET将选择类型转换器并将其用于将其与字符串进行转换:
[TypeConverter(typeof(StringIdConverter))]class StringId{ public string Value { get; set; }}class StringIdConverter : TypeConverter{ public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof(string)) return true; return base.CanConvertFrom(context, sourceType); } public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(StringId)) return true; return base.CanConvertTo(context, destinationType); } public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { if (value is string) { return new StringId { Value = (string)value }; } return base.ConvertFrom(context, culture, value); } public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string) && value is StringId) { return ((StringId)value).Value; } return base.ConvertTo(context, culture, value, destinationType); }}
如果您的字符串表示形式包含嵌入式数字或日期/时间数据,请确保使用
culture传入的数据而不是默认的当前区域性来转换该数据。Json.NET将使用正确的区域性(默认情况下为不变区域性)调用转换器,从而确保生成的JSON文件在区域性之间可移植。
样品提琴。
但是请注意,如果使用的是.Net Core,则仅从Json.NET
10.0.1开始添加对类型转换器的支持。从10.0.3版本开始,不再支持Json.NET
Portable版本中的类型转换器。
另外,如果您不介意向类型中添加特定于Json.NET的属性,则可以使用custom
JsonConverter:
[JsonConverter(typeof(StringIdConverter))]class StringId{ public string Value { get; set; }}class StringIdConverter : JsonConverter{ public override bool CanConvert(Type objectType) { return objectType == typeof(StringId); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var token = JToken.Load(reader); return new StringId { Value = (string)token }; } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var id = (StringId)value; writer.Writevalue(id.Value); }}
您也可以在全局设置中设置转换器。
样品提琴。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)