问题描述
我正在进行的项目的第一步是从记录列表创建一个 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 生成类。然后可以稍微重构它们以在代码中看起来更好。