Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有XML序列化的不需要的属性名_C#_Xml_Serialization_Xml Serialization - Fatal编程技术网

C# 带有XML序列化的不需要的属性名

C# 带有XML序列化的不需要的属性名,c#,xml,serialization,xml-serialization,C#,Xml,Serialization,Xml Serialization,可能重复: 这很难解释,所以我举了一个问题的例子。我有一个包含子类列表的父类。当我序列化父类时,我得到的是我的子类,但它们位于具有公共属性名的元素下。额外的级别不是我需要的。我尝试将XmlIgnore属性添加到属性名,但这抑制了属性名及其包含的发票集合的所有内容 父类: [XmlRoot("header")] public class Lynx : INotifyPropertyChanged { #region /*-- Class Fields --*/ private

可能重复:

这很难解释,所以我举了一个问题的例子。我有一个包含子类列表的父类。当我序列化父类时,我得到的是我的子类,但它们位于具有公共属性名的元素下。额外的级别不是我需要的。我尝试将XmlIgnore属性添加到属性名,但这抑制了属性名及其包含的发票集合的所有内容

父类:

[XmlRoot("header")]
public class Lynx : INotifyPropertyChanged
{

    #region /*-- Class Fields --*/

    private List<InvoiceItem> _invoice = new List<InvoiceItem>();

    #endregion

    [XmlArray("invoice")]
    [XmlArrayItem("invoice", typeof(InvoiceItem))]
    public List<InvoiceItem> invoice
    {
        get
        {
            return _invoice;
        }
        set
        {
            if (value != _invoice)
            {
                _invoice = value;
                OnPropertyChanged("invoice");
            }
        }
    }
[XmlType(TypeName = "invoice")]
public class InvoiceItem : INotifyPropertyChanged
{
    ... properties and methods of the class
}
这就是它正在建设的:

<header>
    <headerid>790aa61a-ad1b-49b9-bfb9-01fe3ca55eca</headerid>
    <invoice>  <-- this line is not needed
        <invoice>
            <company>BRU111</company>
            <format>myformat</format>
            ...

790aa61a-ad1b-49b9-bfb9-01fe3ca55eca

创建额外元素的原因是因为您的属性是项目列表

如果需要单数值,请使用

公共发票项目发票
{

而不是

公开列表发票
{


集合始终放置一个容器,以便将每个项目放置在容器节点下。

标题元素将包含1+个发票元素,因此我确实需要一个发票集合。(删除我的答案,因为@Tuzo发现了一个优秀的现有副本,但是:使用
[XmlElement(“发票”)]
而不是当前属性)@Tuzo-很好,谢谢你,我无法很好地表达这个问题,无法找到另一个。
<header>
    <headerid>790aa61a-ad1b-49b9-bfb9-01fe3ca55eca</headerid>
    <invoice>
        <company>BRU111</company>
        <format>myformat</format>
        ...