C# 在c中将xml不同元素序列化为多个属性#

C# 在c中将xml不同元素序列化为多个属性#,c#,xml,deserialization,C#,Xml,Deserialization,我有下一个xml: <table-display-fields> <field name="NAME/> <field name="DESCRIPTION" /> </table-display-fields> 然后,我将新的xml元素添加到“表显示字段”节点: <table-display-fields> <record-number-field name="ID" /> <field name="

我有下一个xml:

<table-display-fields>
  <field name="NAME/>
  <field name="DESCRIPTION" />
</table-display-fields>
然后,我将新的xml元素添加到“表显示字段”节点:

<table-display-fields>
  <record-number-field name="ID" />
  <field name="NAME/>
  <field name="DESCRIPTION" />
</table-display-fields>

这不管用。如何反序列化新xml并保存现有属性路径?

必须删除XmlArrayItem()属性

[XmlArray("table-display-fields")] 
public object[] TableDisplayItems;
表DisplayItems
中的每个对象将是
字段
记录编号字段


当然,如果在数组顶部只有一个
记录编号字段
,那么解决方案会更好。是这样吗?

如果您能更详细地描述您的需求,然后再说明您的方法方向,那会有所帮助。如果您正在寻找正常的序列化/反序列化,则可以尝试以下解决方案:

using System.Collections.Generic;
using System.Xml.Serialization;

namespace Serialization01 {
    [XmlRoot( "table-display-fields" )]
    public class TableDisplayFields {
        [XmlElement( "record-number-field" )]
        public string RecordNumberField { get; set; }

        [XmlElement( "field" )]
        public List<string> FieldName { get; set; }

        public TableDisplayFields ( ) {
            FieldName = new List<string>( 5 );
        }
    }
}

希望能有帮助。

这样不行吗?到底发生了什么?我有下一个异常:System.Web.HttpUnhandledException(0x80004005):引发了类型为“System.Web.HttpUnhandledException”的异常。-->System.InvalidOperationException:反映类型“TableDisplayConfiguration”的错误。-->System.InvalidOperationException:反映字段“TableDisplayFields”时出错。-->System.InvalidOperationException:命名空间“”中的XML元素“table display fields”已存在于当前作用域中。使用XML属性为元素指定另一个XML名称或命名空间。是。我需要单独的记录编号字段和字段元素。谢谢,但这不是我真正想看到的。这是一个简单的解决方案,但需要重构现有代码。
[XmlArray("table-display-fields")] 
public object[] TableDisplayItems;
using System.Collections.Generic;
using System.Xml.Serialization;

namespace Serialization01 {
    [XmlRoot( "table-display-fields" )]
    public class TableDisplayFields {
        [XmlElement( "record-number-field" )]
        public string RecordNumberField { get; set; }

        [XmlElement( "field" )]
        public List<string> FieldName { get; set; }

        public TableDisplayFields ( ) {
            FieldName = new List<string>( 5 );
        }
    }
}
using System.IO;
using System.Xml.Serialization;
using System;

namespace Serialization01 {
    class Program {
        static void Main ( string [] args ) {
            // Initiate the class
            TableDisplayFields t = new TableDisplayFields( );

            t.RecordNumberField = "ID";
            t.FieldName.Add( "NAME" );
            t.FieldName.Add( "DESCRIPTION" );

            TextWriter tw = new StreamWriter( Path.Combine( Environment.CurrentDirectory, "Data.xml" ) );

            XmlSerializer xs = new XmlSerializer( t.GetType( ) );

            xs.Serialize( tw, t );

            tw.Flush( );
            tw.Close( );

            TextReader tr = new StreamReader( Path.Combine( Environment.CurrentDirectory, "Data.xml" ) );
            TableDisplayFields t2 = xs.Deserialize( tr ) as TableDisplayFields;

            Console.WriteLine( "RecordNumberField for t2 is {0}", t2.RecordNumberField );
            foreach ( string field in t2.FieldName ) {
                Console.WriteLine( "Found field '{0}'", field );
            }
        }
    }
}