我有一个问题,我还找不到解决方案。选项“通过 DataTable.writexml 保存”-不建议。
问题的本质是这样的:有一个包含参数的类
internal class ClassPositions
{
/// <summary>
/// содержание класса позиций
/// </summary>
private ClassTypeData.PositionsData positions = new ClassTypeData.PositionsData();
}
参数类包含一个数据表:
public class ClassTypeData
{
/// <summary>
/// список позиций для справочника
/// </summary>
public class PositionsData {
/// <summary>
/// версия справочника позиций
/// </summary>
public string version = "1.0.0.1";
/// <summary>
/// файл для сохранения/загрузки позиций справочника
/// </summary>
public string file = "positions.xml";
/// <summary>
/// таблица с позициями для смет
/// </summary>
public DataTable table_positions = new DataTable("positions");
}
}
在某处编写的单独方法中,我们序列化此参数。当然,在我的例子中,类型 obj = class PositionsData
public static void save_to_file(object obj, string filename = null)
{
if (filename.Length > 0)
{
try
{
XmlSerializer xml = new XmlSerializer(obj.GetType());
FileStream file = new FileStream(filename, FileMode.Create);
xml.Serialize(file, obj);
file.Close();
}
catch (Exception ex)
{
throw (ex);
}
}
}
问题出现在这样的事实中,例如,DataTable 包含 3 行数据,但是通过这种序列化,只有 2 行存储在 XML 中(由于某种原因,1 行丢失并且没有进入 XML 文件),而不是三个。如果执行 DataTable.WriteXml,那么所有 3 行都将被保存,但我对这个选项不感兴趣。
注意这个问题:如何使用嵌套的 DataTable 序列化类的方法,以便完全保留 DataTable 行的内容而不丢失 1 行?
中的行
DataTable
可以处于不同的状态DataRowState
。为了接受这些更改并相应地在序列化期间写入这些更改,您必须调用该方法AcceptChanges()
(或者RejectChanges()
,如果您想放弃更改)。