2011-12-20 50 views
3

我有一个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> 
    <Messages> 
     <a:Message> 
     <a:message>msg1</a:message> 
     <a:MsgID>1</a:MsgID> 
     </a:Message> 
    </Messages> 
</MessageResponse> 

我的服务合同是象下面这样:和一个更为重要的是: MessageDco类是邮件的副本

[ServiceContract(Namespace="")] 
    [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(MsgIDs); 
       if (objUserLoginProfile != null) 
       { 
        MessageResponse.Status = Status.Success;     
        MessageResponse.Messages =Mapper.ToDataContractObjects(objMessage); 
       } 
       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; } 
} 

我的映射类是象下面这样:

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:”。此外,如果您看到MessageResponse类(状态标记)正确,但MessageResponse中的数组列表(即:Message [])错误。

在此先感谢。

回答

1

a是为您的元素生成的名称空间。

对于DataContractSerializer的,你可以使用ServiceContractAttribute像这样删除你的类型的命名空间中的服务定义:

[ServiceContract(Namespace="")] 
+0

感谢您的答复丰富。我编辑了响应XML,这是我从服务中获得的正确XML。我向ServiceContract添加了名称空间(例如:[ServiceContract(Namespace =“”)])但响应是相同的。请告诉我,如果我在我的代码中做了任何错误的事情。 – 2011-12-20 11:52:22