首页 > 解决方案 > 如何在 C# 模型中命名我的 XML 标头 'header list-id: "inventory"'?

问题描述

我正在处理的项目的第一步是XML从记录列表中创建一个文件。它曾经是javaC#. 他们在 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_>

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

标签: c#xmlxml-serialization

解决方案


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

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

到您的inventoryInventorylistHeader 类,您将获得问题中描述的xml。

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


推荐阅读