Использование точечной нотации в имени свойства JSON (например, payment.token) - PullRequest
2 голосов
/ 10 апреля 2019

Я работаю над сценарием, который должен сделать запрос API. В настоящее время объект для отправки в API выглядит следующим образом:

var request = new
{
    amount = new
    {
        currency = amount.Currency,
        value = amount.Amount
    },
    additionalData = new AdditionalData
    {
        ApplePayToken = paymentToken
    }
};

Проблема заключается в том, что API ожидает, что следующий формат получит свойство AdditionalData:

"additionalData":{
    "payment.token": "some-token"
}

Я использую следующий код, чтобы попытаться переформатировать объект выше:

internal partial class AdditionalData
{
    [JsonProperty(PropertyName="additionalData.payment.token")]
    public string ApplePayToken { get; set; }
}

Как мне заставить это работать? В данный момент код, похоже, ничего не меняет в объекте запроса. Он генерирует это так:

"additionalData":{
    "ApplePayToken": "some-token"
}

1 Ответ

3 голосов
/ 10 апреля 2019

Поскольку остальная часть вашего запроса выглядит как анонимный объект, вместо создания класса только для AdditionalData, вы можете просто использовать Dictionary:

var request = new
{
    amount = new
    {
        currency = amount.Currency,
        value = amount.Amount
    },
    additionalData = new Dictionary<string, object>
    {
        { "payment.token", "some-token" }
    }
};

Поскольку вы сказали, что вы новичок в C #, обратите внимание, что я использую шаблон инициализатора объекта для словаря, что эквивалентно предварительной сборке словаря и присвоению его анонимному объекту additionalData:

Dictionary<string, object> addtData = new Dictionary<string, object>();
addtData.Add("payment.token", "some-token");

var request = new
{
    amount = new
    {
        currency = amount.Currency,
        value = amount.Amount
    },
    additionalData = addtData
};

Попробуйте онлайн

В качестве альтернативы вы можете создать все классы, которые вам нужны в C #:

class Request
{
    public Amount amount { get; set; }
    public AdditionalData additionalData { get; set; }
}

class Amount
{
    public string currency { get; set; }
    public decimal value { get; set; }
}

class AdditionalData
{
    [JsonProperty("payment.token")]
    public string applePayToken { get; set; }
}

Попробуйте онлайн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...