Search code examples
wcfdatacontractserializerdatacontract

WCF datacontractserialization - unexpected elements <a:anyType>


The current xml output looks like:

 <response xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <totalResultCount>10</totalResultCount> 
 <results xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
 <a:anyType i:type="result">
  <EmployeeCode>007</EmployeeCode> 
  <EmployeeName>Bond, James</EmployeeName> 
 </a:anyType>
 <a:anyType i:type="result">
  <EmployeeCode>006</EmployeeCode> 
  <EmployeeName>Foo, Bar</EmployeeName> 
  </a:anyType>
</results>
</response>

I would like the xml to be in this format:

     <response xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <totalResultCount>10</totalResultCount> 
     <results xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
     <result>
      <EmployeeCode></EmployeeCode> 
      <EmployeeName></EmployeeName> 
      </result>
</results>
</response>

Data Contracts

internal static class KnownTypesProvider 
        {     
            public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider)     
            { 
                // collect and pass back the list of known types    
                List<Type> types = new List<Type>();
                types.Add(typeof(EmployeeDTO));
                return types;
            }
        }

        [DataContract(Name = "response")]
        public class Response
        {
            [DataMember(Order = 1)]
            public int totalResultCount { get; set; }
            [DataMember(Order = 2)]        
            public IEnumerable results { get; set; }
        }

        [DataContract(Name = "result")]
        public class EmployeeDTO
        {
            [DataMember]
            public string EmployeeCode { get; set; }
            [DataMember]
            public string EmployeeName { get; set; }  
}

What am I missing here?


Solution

  • IEnumerable is a list of Object, so WCF is adding the type to the output. Can you use IEnumerable<EmployeeDTO> or List<EmployeeDTO>?