C# 在c中将xml不同元素序列化为多个属性#
我有下一个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="
<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 );
}
}
}
}