【发布时间】:2020-12-11 06:08:08
【问题描述】:
假设我有 2 个具有相同根的 XML,示例:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
</catalog>
在第二个 XML 文件中:
<?xml version="1.0"?>
<catalog>
<author id="23">
<author>Gambardella, Matthew</author>
<age>45</age>
</author>
<author id="26">
<author>Ali</author>
<age>65</age>
</author>
</catalog>
当我想使用 Visual Studio 对其进行反序列化时,我将为每个 XML 创建一个类,复制 XML 内容并粘贴特殊 >“将 XML 粘贴为类”。
然后,我会得到很多为我生成的代码,如下所示:
// NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0.
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class catalog
{
private catalogBook[] bookField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("book")]
public catalogBook[] book
{
get
{
return this.bookField;
}
set
{
this.bookField = value;
}
}
}
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class catalogBook
{
private string authorField;
private string titleField;
private string genreField;
private decimal priceField;
private System.DateTime publish_dateField;
private string descriptionField;
private string idField;
/// <remarks/>
public string author
{
get
{
return this.authorField;
}
set
{
this.authorField = value;
}
}
/// <remarks/>
public string title
{
get
{
return this.titleField;
}
set
{
this.titleField = value;
}
}
/// <remarks/>
public string genre
{
get
{
return this.genreField;
}
set
{
this.genreField = value;
}
}
/// <remarks/>
public decimal price
{
get
{
return this.priceField;
}
set
{
this.priceField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(DataType = "date")]
public System.DateTime publish_date
{
get
{
return this.publish_dateField;
}
set
{
this.publish_dateField = value;
}
}
/// <remarks/>
public string description
{
get
{
return this.descriptionField;
}
set
{
this.descriptionField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string id
{
get
{
return this.idField;
}
set
{
this.idField = value;
}
}
}
问题是当我对第二个 XML 重复相同的步骤时,我会在这些行中得到一个错误:
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
错误是Duplicate 'System.SerializableAttribute' attribute
我的问题是当我的 XML 文件具有相同的 ROOT 标签时如何解决这个问题?在这种情况下,根标签是catalog
【问题讨论】:
-
注意:将 XML 粘贴为类选项非常方便,但生成的 C# 非常可怕。如果您愿意,可以用更简洁的手写类型来表示相同的东西,但是:如果这不重要,请不要担心