Как сериализовать сложный C# класс в XML и отправить его в ответ от. net core API? - PullRequest
0 голосов
/ 26 февраля 2020

Я создал объект (Сложный объект) в c#, на который я хочу отправить ответ от API в XML. Как я могу установить значение для сложных узлов и сериализировать его в правильном XML.

Ниже мой код ..

  1. C# объект, который я хочу преобразовать
[XmlRoot]
[Serializable]
public class Response
{
    private Response headerField;

    private Response bodyField;

    /// <remarks/>
    public Response Header
    {
        get
        {
            return this.headerField;
        }
        set
        {
            this.headerField = value;
        }
    }

    /// <remarks/>
    public Response Body
    {
        get
        {
            return this.bodyField;
        }
        set
        {
            this.bodyField = value;
        }
    }

}

public class Header
{
    public string ACCT_NUM { get; set; }
    public string NIC { get; set; }
    public string requestId { get; set; }
    public string BankId { get; set; }
}

public class Body
{
    public string STATUS { get; set; }
    public Body ERROR { get; set; }
}

public class ERROR
{
    public string ERRORCODE { get; set; }

    /// <remarks/>
    public string ERRORDESC { get; set; }

    /// <remarks/>
    public string ERRORTYPE { get; set; }

}
Сериализовать код, с помощью которого я устанавливаю значения в поля и отправляю их.


 var header = new Header()
            {
                ACCT_NUM= arr[0].ACCT_NUM.ToString(),
                BankId= arr[0].BankId.ToString(),
                requestId= arr[0].requestId.ToString(),
                NIC= arr[0].NIC.ToString()
            };

            var body = new Body()
            {
                STATUS = "SUCCESS"
            };

using(var stream=new MemoryStream())
{
    XmlSerializer xmlSer=new
    XmlSerializer(typeof(Response));xmlSer.Serialize(stream,new Response()
    {
        Header = header,
        Body = body
    });

    stream.Position = 0;
    using(var reader = new StreamReader(stream, Encoding.UTF8))
    {
        string value = reader.ReadToEnd();
    }
}

Пожалуйста, объясните мне, как мне добиться Сериализации объекта в XML и отправить его в ответ от API.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Вы можете добавить xml поддержку сериализации к. net core mvc. Это позволит клиенту запрашивать xml через установку заголовка Accept.

services.AddMvc(options =>
{
    options.RespectBrowserAcceptHeader = true; // false by default
    .OutputFormatters.Insert(0, new XmlSerializerOutputFormatter());
    options.FormatterMappings.SetMediaTypeMappingForFormat("xml", MediaTypeHeaderValue.Parse("application/xml"));
});

Или вы можете сопоставить тип ответа на основе аргумента формата в пути запроса;

        [Route("{id}.{format}"), FormatFilter]
        public async Task<IActionResult> Load(int id)
0 голосов
/ 26 февраля 2020

Вы можете попробовать это

public string SerializeToString()
    {
        var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
        var serializer = new XmlSerializer(this.GetType());
        var settings = new XmlWriterSettings();
        settings.Indent = true;
        settings.OmitXmlDeclaration = true;

        using (var stream = new StringWriter())
        using (var writer = XmlWriter.Create(stream, settings))
        {
            serializer.Serialize(writer, this, emptyNamespaces);
            return stream.ToString();
        }
    }
...