2016-04-27 75 views
0

我想创建一个WCF服务,它可以返回我的XML文档看起来像这样:多,在相同的C#DTO相同的元素

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

这个文件看起来像的DTO这样的:

[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; } 
} 

然而,当我尝试以下操作:

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

我得到:

<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> 

我并不需要额外的<info>标签,并命名空间xmlns=""将是不错的已经删除了。我该怎么做才能摆脱它?

回答

0

您可以使用字典或键值对以下提到:

[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

这看起来promissing - 什么如果''KeyValuePair''是一个复杂的类型(类)? –