c# - 将命名空间添加到元素并在没有别名的情况下进行序列化
问题描述
我想将命名空间设置为包装器。但不是用别名序列化它,我需要它在包装元素本身上。
我得到的是以下
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:my-namepsace.com/asdf">
<soapenv:Header/>
<soapenv:Body>
<urn:YVDMS_TASK>
...
</urn:YVDMS_TASK>
</soapenv:Body>
<soapenv:Envelope>
但我想要这样:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<YVDMS_TASK xmlns="urn:my-namepsace.com/asdf">
...
</YVDMS_TASK>
</soapenv:Body>
<soapenv:Envelope>
这可能吗?
解决方案
第一张图片指定了 ServiceContract 的命名空间,要指定你的 body 的命名空间,你可以尝试消息契约。但是您应该注意,返回的类型也应该具有 MessageContract 属性。
下面是我的代码。
[MessageContract(WrapperNamespace = "www.message.com")]
public class Employee
{
[MessageBodyMember(Namespace = "www.message.com")]
public string Id { get; set; }
[MessageBodyMember(Namespace = "www.message.com")]
public string Name { get; set; }
[MessageBodyMember(Namespace = "www.message.com")]
public string Department { get; set; }
[MessageBodyMember(Namespace = "www.message.com")]
public string Grade { get; set; }
}
[ServiceContract]
public interface IEmployeeService
{
[OperationContract]
Employee GetEmployee(Employee employee);
}
public class EmployeeService : IEmployeeService
{
public Employee GetEmployee(Employee employee)
{
return employee;
}
}
当我在客户端调用服务时
using (ChannelFactory<IEmployeeService> ChannelFactory = new ChannelFactory<IEmployeeService>("emp"))
{
// ChannelFactory.Endpoint.EndpointBehaviors.Add(new MyEndpointBehavior());
IEmployeeService employeeService = ChannelFactory.CreateChannel();
employeeService.GetEmployee(new Employee() { Name = "abc", Department = "dep", Grade = "male", Id = "1er" });
// List<Employee> list= employeeService.GetList();
Console.Read();
}
有关详细信息,请参阅https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/using-message-contracts
推荐阅读
- sql - 下一个日期之间的间隔
- spring - Spring Dataflow 将消息从一个 Rabbit VHost 移动到另一个
- c# - 使用动态sql和sql连接asp.net c# sql server的多个搜索条件中的问题
- java - 如何验证显示的日期是否正确?
- vba - 复选框过滤问题
- c# - 使用身份服务器保护 API 时出现问题 - 在 Angular 中登录后无法正常工作
- docker-compose - 没有 mysql 超级用户凭据的 Fusionauth-app docker
- json - 如何在“json”处修复错误 822 意外令牌?
- apache-spark - 使用 spark-streaming 将数据发布到 kafka 主题时重复
- byte-buddy - 如何使用字节伙伴实现 ClassFileTransformer#transform?