Пользовательский Json Formatter в dotnet core Web API - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу уменьшить размер моего ответа JSON, фактически представляя десятичное число.Прямо сейчас у меня есть класс, который отправляется примерно раз:

public class Article{
    public string Name { get; set; }
    (...)
    public decimal Price { get; set; }
}

Цена автоматически отправляется как "10.000000", но я хочу сохранить (около 8 Кбайт!), Чтобы уменьшить только десятичное форматированиена «10» или «10,5» и вырезать ненужные нули.

Для этого мне нужно написать свой собственный OutputFormatter, но я могу просто сопоставить всю структуру классов (которая имеет гораздо больше классов), и я неЯ не знаю, как динамически форматировать как Json, но правильно использовать только десятичные дроби ...

public class CustomDecimalFormatter : OutputFormatter
{
    public string ContentType { get; private set; }

    public CustomDecimalFormatter()
    {
        ContentType = "application/json";
        SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/json"));
    }

    protected override bool CanWriteType(Type type)
    {
        return type == typeof(decimal);
    }

    public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context)
    {
        var response = context.HttpContext.Response;
        var decimalValue = (decimal)context.Object;

        var formatted = decimalValue.ToString("F2", CultureInfo.InvariantCulture);

        await response.WriteAsync(formatted);
    }
}

Как сделать общий вывод ответа Json и настроить только десятичное?

Thx

1 Ответ

1 голос
/ 20 сентября 2019

Возможно, это не поможет при форматировании, но если все, что вы пытаетесь сделать, это отправить десятичную с укороченной длиной, почему бы не создать открытое свойство, которое возвращает то же самое?Что-то вроде

class MyClass
{
    private decimal ProductPrice {get;set;}
    public string Price { get { return ProductPrice.ToString("F2", CultureInfo.InvariantCulture); } }
}

Таким образом, вы можете легко настроить свой вывод в будущем, не изменяя и не влияя на большую часть кода.

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