如何在 C# 模型中命名我的 XML 标头“header list-id:“inventory””?

问题描述

正在进行的项目的第一步是从记录列表创建一个 XML 文件。它曾经是用 java 编写的,但我正在将其迁移到 C#。他们在 Java 中的做法是明确地写出每一行,我正在尝试合并一种以编程方式执行此操作的方法,以便在部署的后续步骤中可以更改这些值。

我必须复制的文件标题名称header list-id: "inventory"

我只是把“标题”写得很好,但我不知道如何包含其余部分。

    [Serializable()]
    [DesignerCategory("code")]
    [XmlType(AnonymousType = false,Namespace = "http://www.demandware.com/xml/impex/inventory/2007-05-31")]
    [XmlRoot(Namespace = "http://www.demandware.com/xml/impex/inventory/2007-05-31",IsNullable = false)]
    public partial class inventory
    {

        private inventoryInventorylist inventorylistField;

        [XmlElement("inventory-list")]
        public inventoryInventorylist inventorylist
        {
            get
            {
                return inventorylistField;
            }
            set
            {
                inventorylistField = value;
            }
        }
    }

    [Serializable()]
    [DesignerCategory("code")]
    [XmlType(AnonymousType = true,TypeName = "inventory-list")]
    public partial class inventoryInventorylist
    {
        public inventoryInventorylistHeader header;

        private inventoryInventorylistHeader headerField
        {
            get
            {
                return header;
            }
            set
            {
                header = value;
            }
        }
    }

    [Serializable()]
    [DesignerCategory("code")]
    [XmlType(AnonymousType = false,TypeName = "header")]
    public partial class inventoryInventorylistHeader 
    {

        [XmlElement("default-instock")]
        public bool defaultinstock
        {
            get
            {
                return defaultinstockField;
            }
            set
            {
                defaultinstockField = false;
            }
        }

        [XmlElement("description")]
        public string description
        {
            get
            {
                return descriptionField;
            }
            set
            {
                descriptionField = "Inventory";
            }
        }

        [XmlElement("use-bundle-inventory-only")]
        public bool usebundleinventoryonly
        {
            get
            {
                return usebundleinventoryonlyField;
            }
            set
            {
                usebundleinventoryonlyField = false;
            }
        }

        [XmlElement("on-order")]
        public bool onorder
        {
            get
            {
                return onorderField;
            }
            set
            {
                onorderField = false;
            }
        }
}

创作:

 var inventory = new inventory()
 {
     inventorylist = new inventoryInventorylist()
     {
          header = new inventoryInventorylistHeader()
          {
              defaultinstock = false,description = "Inventory",usebundleinventoryonly = false,onorder = false
          }
     }
 }

返回:

<inventory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.demandware.com/xml/impex/inventory/2007-05-31">
  <inventory-list>
    <header>
      <default-instock>false</default-instock>
      <description>Inventory</description>
      <use-bundle-inventory-only>false</use-bundle-inventory-only>
      <on-order>false</on-order>
    </header>

我希望它返回:

<inventory xmlns="http://www.demandware.com/xml/impex/inventory/2007-05-31">
  <inventory-list>
    <header list-id="inventory">
      <default-instock>false</default-instock>
      <description>Inventory</description>
      <use-bundle-inventory-only>false</use-bundle-inventory-only>
      <on-order>false</on-order>
    </header>

如果我在模型中写这个:

public partial class inventoryInventorylist
    {
        [XmlElement("header list-id:\"inventory\"")]
        public inventoryInventorylistHeader header;

然后变成这样:

<inventory-list>
    <header_x0020_list-id_x003A__x0022_inventory_x0022_>
      <default-instock>false</default-instock>
      <description>Inventory</description>
      <use-bundle-inventory-only>false</use-bundle-inventory-only>
      <on-order>false</on-order>
    </header_x0020_list-id_x003A__x0022_inventory_x0022_>

当我序列化模型时,如何强制它显示所需的文本?

解决方法

您可以为此使用 XmlAttribute 属性。 如果添加

[XmlAttribute("list-id")]
public string listid
{
    get;
    set;
}

对于您的inventoryInventorylistHeader 类,您将获得问题中所述的xml。

我通常做的是获取 xml 并使用 Visual Studio 生成一个 xsd。 然后我将打开 vs developer 命令提示符并使用 xsd.exe 生成类。然后可以稍微重构它们以在代码中看起来更好。