2017-03-07 2 views
2

Ich habe Probleme beim Serialisieren eines Objekts, das meinem Projekt über eine Service-Referenz zu XML hinzugefügt wurde.C# Serialisierung des referenzierten Objekts

Das Objekt, das über die Service-Referenz verwiesen wird, hat die Struktur:

public class GetProspectsContactStatusParametersV1 
{ 
    public GetProspectsContactStatusParametersV1() 
    { 
     Version = 1; 
    } 

    public int Version { get; set; } 

    public ProspectIds ProspectIDs { get; set; } 

    public InterestIds InterestIDs { get; set; } 

    public class ProspectIds 
    { 
     private List<int> _prospectIds = new List<int>(); 
     [XmlElement("ProspectId")] 
     public List<int> Items 
     { 
      get { return _prospectIds; } 
      set { _prospectIds = value; } 
     } 
    } 

    public class InterestIds 
    { 
     private List<int> _interestIds = new List<int>(); 
     [XmlElement("InterestId")] 
     public List<int> Items 
     { 
      get { return _interestIds; } 
      set { _interestIds = value; } 
     } 
    } 
} 

Dieser Code ist Teil eines Web-Service-Projektes, das ich in einer anderen Anwendung verweisen. Mit Hilfe der Referenz in dem anderen Projekt, das ich eine Instanz der obigen Aufgabe wie folgt erstellen:

var request = new ProspectsWebServiceMetadata.GetProspectsContactStatusParametersV1(); 
request.Version = 1; 
request.InterestIDs = new ProspectsWebServiceMetadata.InterestIds 
{ 
    2,3,4,5 
}; 

Und ich versuche dann dieses Objekt in XML serialisieren eine grundlegende XmlSerializer mit:

public static string ToXmlString(object source) 
{ 
    using (StringWriter sww = new StringWriter()) 
    using (XmlWriter writer = XmlWriter.Create(sww)) 
    { 
     System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(source.GetType()); 

     ser.Serialize(writer, source); 

     return sww.ToString(); 
    } 
} 

Der XML-Code, wird wie folgt erstellt:

<?xml version="1.0" encoding="utf-16"?> 
    <GetProspectsContactStatusParametersV1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Version>1</Version> 
    <InterestIDs> 
     <int>2</int> 
     <int>3</int> 
     <int>4</int> 
     <int>5</int> 
    </InterestIDs> 

der Teil des XML ein bove innerhalb von "InterestIDs" sollte "InterestID" anstelle von "int" haben.

Der Code erzeugt als Teil der Referenz des Imports anzuzeigen scheint, dass es richtig serialisiert werden sollte, aber offensichtlich nicht wahr:

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] 
[System.Runtime.Serialization.CollectionDataContractAttribute(Name="InterestIds", Namespace="http://www.testing.com/", ItemName="InterestId")] 
[System.SerializableAttribute()] 
public class InterestIds : System.Collections.Generic.List<int> { 
} 

Irgendwelche Ideen?

Antwort

0

Das Attribut im endgültigen Snippet für die CollectionDataContractAttribute markiert tatsächlich die Daten für die DataContractSerializer, nicht die XmlSerializer.

+0

Von Ihrem Vorschlag fand ich die Frage http://stackoverflow.com/questions/7348240/xml-serialization-using-datacontractsserializer-and-xmlserializer?rq=1. Sobald ich die '[DataContract]' und '[DataMember]' hinzugefügt habe, funktioniert die Serialisierung korrekt. –

Verwandte Themen