如何将复杂的 C# 类序列化为 XML 并将其作为 .net 核心 API 的响应发送?
Posted
技术标签:
【中文标题】如何将复杂的 C# 类序列化为 XML 并将其作为 .net 核心 API 的响应发送?【英文标题】:How to Serialize Complex C# class to XML and send it as response from .net core API? 【发布时间】:2020-02-26 06:33:20 【问题描述】:我在 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 的响应发送。
【问题讨论】:
检查这个:这将有助于***.com/questions/38316358/… 嗨@ZeeCode 我尝试了很多但不明白。 【参考方案1】:您可以将 xml 序列化支持添加到 .net core mvc。这将允许客户端通过设置 Accept 标头来请求 xml。
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)
【讨论】:
嗨@Jeremy Lakeman,是的,我的 post 方法接受 XML 作为请求,我能够应对下一个挑战是在 XML 中传递响应,我已经根据我创建了响应...上面的类创建了我希望它是我对 XML 中的 API 的响应。格式化程序会完成工作,但在我的情况下,我有需要在 xml 中序列化并简单传递的对象。【参考方案2】:你可以试试这个
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();
【讨论】:
嗨@Fazal Qayyun我如何访问复杂对象意味着如果你看到我的开始标签是响应然后是标题然后标题中有字段..我需要在xml中生成该流 您的代码只为我提供了以下 XML 响应。以上是关于如何将复杂的 C# 类序列化为 XML 并将其作为 .net 核心 API 的响应发送?的主要内容,如果未能解决你的问题,请参考以下文章