2016-04-27 2 views
0

ich einen WCF-Dienst erstellen bin versucht, die mir ein XML-Dokument suchen so etwas wie diese zurückgeben kann:mehrere identische Elemente in der gleichen C# DTO

<alert> 
    <identifier>SecretID</identifier> 
    <info> 
     <valueName>Name1</valueName> 
     <value>Info1</value> 
    </info> 
    <info> 
     <valueName>Name2</valueName> 
     <value>Info2</value> 
    </info> 
</alert> 

Die DTO dieser Datei würde etwas aussehen dies:

[DataContract(Name = "alert", Namespace = "")] 
public class Alert 
{ 
    [DataMember(Name = "identifier")] 
    public string identifier { get; set; } 

    [DataMember(Name = "info")] 
    public List<Info> Info { get; set; } 
} 

[DataContract(Name = "info", Namespace = "")] 
public class Info 
{ 
    [DataMember(Name = "valueName")] 
    public string ValueName { get; set; } 

    [DataMember(Name = "value")] 
    public string Value { get; set; } 
} 

Allerdings, wenn ich mit dem folgenden Versuch:

var alert = new Alert() 
{ 
    Identifier = "SecretID", 
    Info = new List<Info> 
    { 
     new Info() {ValueName = "Name1", Value = "Info1"}, 
     new Info() {ValueName = "Name2", Value = "Info2"}, 
    } 
} 

erhalte ich:

<alert> 
    <identifier>SecretID</identifier> 
    <info> 
     <info xmlns=""> 
      <valueName>Name1</valueName> 
      <value>Info1</value> 
     </info> 
     <info xmlns=""> 
      <valueName>Name2</valueName> 
      <value>Info2</value> 
     </info> 
    </info> 
</alert> 

Ich brauche nicht den zusätzlichen <info> Tag, und der Namespace xmlns="" wäre schön, zu entfernt zu haben. Was soll ich tun, um es los zu werden?

Antwort

0

Sie können Wörterbuch oder Schlüsselwertpaare verwenden, wie unten erwähnt:

[DataContract(Name = "alert", Namespace = "")] 
public class Alert 
{ 
    [DataMember(Name = "identifier")] 
    public string identifier { get; set; } 

    [DataMember(Name = "info")] 
    public KeyValuePair<string, string> Info { get; set; } 
} 

var alert = new Alert() 
{ 
    Identifier = "SecretID", 
    Info = new KeyValuePair<string, string>() 
} 
+0

Das sieht versprechend - was ist, wenn die '' KeyValuePair'' ein komplexer Typ (Klasse)? –