C# 调整并简化非常简单类的DataContract序列化?
假设我有一个类型,它的值可以完全用整数表示,但有验证逻辑,它将在Web API中返回并接受。为了保持良好的代码并避免原始的困扰,我可能会做以下事情:C# 调整并简化非常简单类的DataContract序列化?,c#,asp.net-web-api,datacontractserializer,C#,Asp.net Web Api,Datacontractserializer,假设我有一个类型,它的值可以完全用整数表示,但有验证逻辑,它将在Web API中返回并接受。为了保持良好的代码并避免原始的困扰,我可能会做以下事情: public class FiscalPeriod { public FiscalPeriod(int id) { if (!Validator.IsValidPeriod(id)) throw new ArgumentException($"Invalid fiscal period ID
public class FiscalPeriod
{
public FiscalPeriod(int id)
{
if (!Validator.IsValidPeriod(id))
throw new ArgumentException($"Invalid fiscal period ID '{id}'", nameof(id));
Id = id;
}
public int Id { get; private set; }
public override string ToString() => Id.ToString();
public static implicit operator int(FiscalPeriod period) => period.Id;
}
然后,当Web API调用返回此类型时,它将序列化为JSON,如下所示:
"FiscalPeriod" : {"Id": 201601},
是否有办法强制将其序列化为以下内容?
"FiscalPeriod" : 201601,
因此,它可以更容易地作为客户端的普通数字处理?您可以告诉Json.Net如何使用JsonConverter属性处理该类型
public class ViewModel
{
public FiscalPeriod FiscalPeriod { get; set; }
}
public class FiscalPeriodConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var fiscalPeriod = value as FiscalPeriod;
writer.WriteStartObject();
serializer.Serialize(writer, fiscalPeriod.Id);
writer.WriteEndObject();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type objectType)
{
return typeof(FiscalPeriod).IsAssignableFrom(objectType);
}
}
[JsonConverter(typeof(FiscalPeriodConverter))]
public class FiscalPeriod
{
public FiscalPeriod(int id)
{
if (!Validator.IsValidPeriod(id))
throw new ArgumentException($"Invalid fiscal period ID '{id}'", nameof(id));
Id = id;
}
public int Id { get; private set; }
public override string ToString() => Id.ToString();
public static implicit operator int(FiscalPeriod period) => period.Id;
}
您的意思是
验证程序。IsNotValidPeriod(id)
?已修复。非常感谢。