【问题标题】:Multiple, identical elements in the same C# DTO同一个 C# DTO 中的多个相同元素
【发布时间】:2016-04-27 13:24:53
【问题描述】:

我正在尝试创建一个 WCF 服务,它可以返回一个类似于这样的 XML 文档:

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

我不需要额外的&lt;info&gt; 标记,命名空间xmlns="" 也可以删除。我应该怎么做才能摆脱它?

【问题讨论】:

    标签: c# xml wcf


    【解决方案1】:

    您可以使用字典或键值对,如下所述:

    [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>()
    }
    

    【讨论】:

    • 这看起来很有希望 - 如果 KeyValuePair 是一个复杂类型(类)怎么办?
    猜你喜欢
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 2019-08-13
    • 2022-11-04
    • 1970-01-01
    • 2020-07-27
    • 2017-06-09
    • 1970-01-01
    相关资源
    最近更新 更多