我有一个wcf服务,我的课程如下:
public class Message
{
[XmlElement(ElementName = "message")]
[DataMember(Name = "message")]
public string message { get; set; }
[XmlElement(ElementName = "MsgID")]
[DataMember(Name = "MsgID")]
public string MsgID{ get; set; }
}
然后我在浏览器中浏览了我的服务xml,如下所示:
<MessageResponse>
<Status>SUCCESS</Status>
<a:Message>
<a:message>msg1</a:message>
<a:MsgID>1</a:MsgID>
</a:Message>
</MessageResponse>
我的服务合同如下: 还有一个重要的事情是:MessageDco类是Message Class的副本
[ServiceContract()]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class UserLoginProfileService
{
[WebGet(UriTemplate = "/GetMessages?MsgID={MsgID}")]
public MessageResponse GetMessage(Guid MsgID)
{
MessageResponse objMessageResponse = new MessageResponse();
try
{
Message objMessage = new MessageFacade().GetMessage(MsgID);
if (objUserLoginProfile != null)
{
MessageResponse.Status = Status.Success;
MessageResponse.Messages = Mapper.ToDataContractObjects(Message);
}
else
{
objMessageResponse.Status = Status.Success;
}
}
catch (Exception ex)
{
objMessageResponse.Status = Status.Failure;
}
return objMessageResponse;
}
}
public class MessageResponse
{
[XmlElement(ElementName = "Messages")]
[DataMember(Name = "Messages")]
public MessageDco[] Messages { get; set; }
[XmlElement(ElementName = "Status")]
[DataMember(Name = "Status")]
public string Status { get; set; }
}
我的mapper类如下:
public sealed class Mapper
{
public static MessageDco[] ToDataContractObjects(IEnumerable<MessageDco> objMessageDco)
{
if (objMessageDco != null)
{
return objMessageDco.Select(a => ToDataContractObjects(a)).ToArray();
}
else
{
return null;
}
}
}
如果我们看到“a:”被添加到标签中。为什么要添加?我无法从标签中删除“a:”。请帮我如何从标签中删除“a:”。如果您看到状态标记正确无误,也可以。
提前致谢。
答案 0 :(得分:0)
如果您只使用DataContractSerializer,则不需要XmlElement属性
您还应该在所有类上使用DataContract属性并指定命名空间,因为如果它们缺失则会隐式定义它们。不同的类可能具有不同的XML名称空间。
MessageResponse对象有一个MessageDco对象的Messages数组,但提供的示例XML不匹配,我希望 Messages 元素包含一组 Message 元素。< / p>