Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调整并简化非常简单类的DataContract序列化?_C#_Asp.net Web Api_Datacontractserializer - Fatal编程技术网

C# 调整并简化非常简单类的DataContract序列化?

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

假设我有一个类型,它的值可以完全用整数表示,但有验证逻辑,它将在Web API中返回并接受。为了保持良好的代码并避免原始的困扰,我可能会做以下事情:

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)
?已修复。非常感谢。