WCF服务中不需要的标记名称

时间:2011-12-19 10:57:50

标签: asp.net wcf

我有一个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:”。如果您看到状态标记正确无误,也可以。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您只使用DataContractSerializer,则不需要XmlElement属性

您还应该在所有类上使用DataContract属性并指定命名空间,因为如果它们缺失则会隐式定义它们。不同的类可能具有不同的XML名称空间。

MessageResponse对象有一个MessageDco对象的Messages数组,但提供的示例XML不匹配,我希望 Messages 元素包含一组 Message 元素。< / p>