c# - 如何将复杂的 C# 类序列化为 XML 并将其作为 .net 核心 API 的响应发送?
问题描述
我在 c# 中创建了一个对象(复杂对象),我想用 XML 从 API 发送响应。如何将值设置为复杂节点并以适当的 XML 序列化它。
下面是我的代码..
- 我要转换的 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 的响应发送。
解决方案
你可以试试这个
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();
}
}