Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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# 将json.net属性反序列化为大写_C#_Json.net - Fatal编程技术网

C# 将json.net属性反序列化为大写

C# 将json.net属性反序列化为大写,c#,json.net,C#,Json.net,鉴于以下POCO: public class AggV2 { [JsonProperty("T")] public string Ticker { get; set; } [JsonProperty("v")] public decimal Volume { get; set; } [JsonProperty("o")] public decimal Open { get; set; }

鉴于以下POCO:

public class AggV2
{
    [JsonProperty("T")]
    public string Ticker { get; set; }
    [JsonProperty("v")]
    public decimal Volume { get; set; }
    [JsonProperty("o")]
    public decimal Open { get; set; }
    [JsonProperty("c")]
    public decimal Close { get; set; }
    [JsonProperty("h")]
    public decimal High { get; set; }
    [JsonProperty("l")]
    public decimal Low { get; set; }
    [JsonProperty("t")]
    [JsonConverter(typeof(UnixMillisecondsConverter))]
    public DateTimeOffset Timestamp { get; set; }
}
我已经看到第三方数据提供商对同一个股票代码(即MsFT和MsFT)发送了混合案例-这导致了MSSQL密钥约束的噩梦

第一步是过滤到一个常见的情况,这样对于上面的示例,
Ticker
属性值将始终是MSFT


如何确保
股票代码
始终以大写字母序列化?我编写了以下转换器,这是最佳实践方式还是我重新发明了方向盘

public class AggV2
{
    [JsonProperty("T")]
    [JsonConverter(typeof(UppercaseStringConverter))]
    public string Ticker { get; set; }
    [JsonProperty("v")]
    public decimal Volume { get; set; }
    [JsonProperty("o")]
    public decimal Open { get; set; }
    [JsonProperty("c")]
    public decimal Close { get; set; }
    [JsonProperty("h")]
    public decimal High { get; set; }
    [JsonProperty("l")]
    public decimal Low { get; set; }
    [JsonProperty("t")]
    [JsonConverter(typeof(UnixMillisecondsConverter))]
    public DateTimeOffset Timestamp { get; set; }
    [JsonProperty("n")]
    public int Samples { get; set; }
}

public class UppercaseStringConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(string);
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        if (value is string str)
            writer.WriteValue(str.ToUpper());
        else
            throw new JsonSerializationException("Expected date object value.");
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        bool nullable = Nullable.GetUnderlyingType(objectType) != null;

        if (reader.TokenType == JsonToken.Null)
        {
            if (!nullable)
            {
                throw new JsonSerializationException($"Cannot convert null value to {objectType}.");
            }
            return null;
        }

        if (reader.TokenType == JsonToken.String)
            return ((string)reader.Value).ToUpper();
        else
            throw new JsonSerializationException($"Unexpected token parsing date. Expected String, got {reader.TokenType}.");
    }
}

默认情况下,JSON.NET不区分大小写。您可以在属性中使用目标大小写。