响应中设置的默认 XMLNamespace 前缀对于 .Net Core 和 MVC 是不同的 我正在尝试镜像该行为,使其与 MVC 相同。
我无法找到 .Net Core 代码中如何设置 d1p1,d2p1。我相信它们是默认的命名空间前缀。但我想要它 a、b、c 等,而不是 d1p1、d2p1、d3p1 等
I have not customised XMLFormatter in either project . I believe this is the way to fix but i cannot understand where i need to go looking
在 Asp.Net Core Web API 中:
<ReservationDetail xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.ReservationResponseModel">
<Detail xmlns:d2p1="http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.ReservationModel">
<d2p1:ActionItems xmlns:d3p1="http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.CommonModel"/>
<d2p1:Association>
<d2p1:ReservationAssociation>
<d2p1:Requestor xmlns:d5p1="http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.CommonModel">
<d5p1:ChannelName>NCC</d5p1:ChannelName>
</d2p1:Requestor>
</d2p1:ReservationAssociation>
</d2p1:Association>
<d2p1:Channel>NCC</d2p1:Channel>
在 WCF(.Net Framework)中:
<ReservationDetail xmlns="http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.ReservationResponseModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Detail xmlns:a="http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.ReservationModel">
<a:ActionItems xmlns:b="http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.CommonModel"/>
<a:Association>
<a:ReservationAssociation>
<a:Requestor xmlns:b="http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.CommonModel">
<b:ChannelName>NDC</b:ChannelName>
</a:Requestor>
</a:ReservationAssociation>
</a:Association>
<a:Channel>NDC</a:Channel>
最佳答案
I have not customised XMLFormatter in either project . I believe this is the way to fix but i cannot understand where i need to go looking
您可以在 Detail
、ActionItems
和 Requestor
三个类中添加 XmlSerializerNamespaces 类型的字段。
根据您的xml结构,我创建了以下类(您可以自己修改一些不同的地方。):
public class ReservationDetail
{
public Detail Detail { get; set; }
}
[XmlType(Namespace = "http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.ReservationModel")]
public class Detail
{
public ActionItems ActionItems { get; set; }
public Association Association { get; set; }
public string Channel { get; set; }
[XmlNamespaceDeclarations]
public XmlSerializerNamespaces ns;
}
[XmlType(Namespace = "http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.CommonModel")]
public class ActionItems
{
public string data { get; set; }
[XmlNamespaceDeclarations]
public XmlSerializerNamespaces ns;
}
public class Association
{
public ReservationAssociation ReservationAssociation { get; set; }
}
public class ReservationAssociation
{
public Requestor Requestor { get; set; }
}
[XmlType(Namespace = "http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.CommonModel")]
public class Requestor
{
public string ChannelName { get; set; }
[XmlNamespaceDeclarations]
public XmlSerializerNamespaces ns;
}
代码:
public IActionResult ReturnXml()
{
ReservationDetail request = new ReservationDetail()
{
Detail = new Detail()
{
ActionItems = new ActionItems() { },
Channel = "NCC",
Association = new Association()
{
ReservationAssociation = new ReservationAssociation()
{
Requestor = new Requestor()
{
ChannelName = "NCC"
}
}
}
}
};
request.Detail.ns = new XmlSerializerNamespaces();
request.Detail.ns.Add("a", "http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.ReservationModel");
request.Detail.ActionItems.ns = new XmlSerializerNamespaces();
request.Detail.ActionItems.ns.Add("b", "http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.CommonModel");
request.Detail.Association.ReservationAssociation.Requestor.ns = new XmlSerializerNamespaces();
request.Detail.Association.ReservationAssociation.Requestor.ns.Add("b", "http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.CommonModel");
return Ok(request);
}
关于c# - 在执行响应的 XML 序列化时修改默认命名空间前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63252215/