C# Регистро чувствительный JsonProperty

Рейтинг: 0Ответов: 0Опубликовано: 23.04.2023

У меня от сервера приходит следующая структура:

{
    "a": 2612272441,
    "p": "27556.67000000",
    "q": "0.00173000",
    "f": 3091609090,
    "l": 3091609090,
    "T": 1682261520001,
    "m": false,
    "M": true
}

В ней возвращается 2 поля (m и M) - отличие лишь в регистре.

Мне нужно десериализовать этот json в следующий объект:

public readonly record struct AggregatedTradeInfoResponse
{
    /// <summary>
    /// Идентификатор.
    /// </summary>
    [JsonProperty("a")]
    public ulong Id { get; init; }
    
    /// <summary>
    /// First tradeId.
    /// </summary>
    [JsonProperty("f")]
    public ulong FirstId { get; init; }
    
    /// <summary>
    /// Last tradeId.
    /// </summary>
    [JsonProperty("l")]
    public ulong LastId { get; init; }

    /// <summary>
    /// Цена.
    /// </summary>
    [JsonProperty("p")]
    public decimal Price { get; init; }
    
    /// <summary>
    /// Количество.
    /// </summary>
    [JsonProperty("q")]
    public decimal Qty { get; init; }
    
    /// <summary>
    /// Время сделки.
    /// </summary>
    [JsonProperty("T")]
    public DateTimeOffset Time { get; init; }
    
    /// <summary>
    /// Является ли покупатель создателем.
    /// </summary>
    [JsonProperty("m")]
    public bool IsBuyerMaker { get; init; }
    
    /// <summary>
    /// Является лучшим совпадением.
    /// </summary>
    [JsonProperty("M")]
    public bool IsBestMatch { get; init; }
}

Однако при десиарелизации (используется Newtonsoft) возникает ошибка так как библиотека считает M и m одинаковыми параметрами. КАк с помощью аттрибутов сказать что требуется CaseSensitive вусуриализация?

Текст ошибки : A member with the name 'm' already exists on 'AT.Connectors.Binance.Models.Spot.MarketData.AggregatedTradeInfoResponse'. Use the JsonPropertyAttribute to specify another name.

Настройки Json сериализатора:

var settings = new JsonSerializerSettings
        {
            NullValueHandling = NullValueHandling.Ignore,
            DateTimeZoneHandling = DateTimeZoneHandling.Utc,
            ContractResolver = new CamelCasePropertyNamesContractResolver(),
            Converters =
            {
                new StringEnumConverter(new SnakeCaseNamingStrategy()),
                new StringEnumConverter(new KebabCaseNamingStrategy()),
                new StringEnumConverter(),
                new DateTimeOffsetConverter()
            },
        };

Ответы

Ответов пока нет.