C# 将json.net属性反序列化为大写
鉴于以下POCO: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; }
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不区分大小写。您可以在属性中使用目标大小写。