Повышение производительности XML-сериализатора в API - PullRequest
0 голосов
/ 08 ноября 2019

Я создаю конечную точку HttpPost для API, который принимает тело XML, выполняет некоторую обработку полученных данных, отправляет запрос на внешний API и возвращает данные из внешнего API в формате XML.

Во время этого процесса я сериализую и десериализую в несколько различных классов. У меня проблема в том, что конструктор для этих сериализаторов загружается относительно долго и влияет на время отклика моего API.

Вот текущий код для сериализации / десериализации:

public static T DeserializeObject<T>(Stream objectStream)
{
    try
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        using (StreamReader stream = new StreamReader(objectStream))
        {
            return (T)serializer.Deserialize(stream);
        }
    }
    catch (Exception ex)
    {
        HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.InternalServerError);
        message.Content = new StringContent("Error deserializing type: " + typeof(T).ToString() + Environment.NewLine
                                                + ex.Message
                                                + (ex.InnerException != null ? Environment.NewLine + ex.InnerException.Message : string.Empty));
        throw new HttpResponseException(message);
    }
}

public static string SerializeObject<T>(T objectToSerialize)
{
    try
    {
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));

        using (MemoryStream stream = new MemoryStream())
        using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8))
        {
            xmlSerializer.Serialize(writer, objectToSerialize);

            return Encoding.UTF8.GetString(stream.ToArray());
        }
    }
    catch (Exception ex)
    {
        HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.InternalServerError);
        message.Content = new StringContent("Error serializing type: " + typeof(T).ToString() + Environment.NewLine
                                                + ex.Message
                                                + (ex.InnerException != null ? Environment.NewLine + ex.InnerException.Message : string.Empty));
        throw new HttpResponseException(message);
    }
}

У меня есть довольно сложные классы, к которым сериализуются, но это неизбежно из-за необходимости отправки запроса во внешний API. Я также привязан к использованию XML из-за интеграции третьих сторон с API

Как я могу улучшить производительность сериализатора XML и ускорить время отклика моего API?

...