首页 > 解决方案 > 如何将复杂的 C# 类序列化为 XML 并将其作为 .net 核心 API 的响应发送?

问题描述

我在 c# 中创建了一个对象(复杂对象),我想用 XML 从 API 发送响应。如何将值设置为复杂节点并以适当的 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; }

}
  1. 序列化代码,我通过它为字段设置值并发送。


 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 的响应发送。

标签: c#xmlasp.net-core-webapixmlserializer

解决方案


你可以试试这个

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();
        }
    }

推荐阅读