Хочу сохранять при закрытии формы данные в файл и потом загружать. При сохранении все сохраняется, а при открытии не загружается. Структура:
[XmlRoot(ElementName = "ArrayOfAllList")]
public class AllList
{
[XmlElement(ElementName = "DdmPkgStateTable")]
public List<DdmPkgStateTable> ListDdmPkgStateTable = new List<DdmPkgStateTable>();
[XmlElement(ElementName = "DDMTable")]
public List<DDMTable> ListDDMTable = new List<DDMTable>();
}
[XmlRoot(ElementName = "DdmPkgStateTable")]
public struct DdmPkgStateTable
{
[XmlElement(ElementName = "pkgstate")]
public string pkgstate { get; set; }
[XmlElement(ElementName = "statedttm")]
public DateTime statedttm { get; set; }
}
[XmlRoot(ElementName = "DDMTable")]
public struct DDMTable
{
[XmlElement(ElementName = "table_id")]
public int table_id { get; set; }
[XmlElement(ElementName = "pkg_id")]
public int pkg_id { get; set; }
[XmlElement(ElementName = "table_code")]
public int table_code { get; set; }
[XmlElement(ElementName = "tablename")]
public string tablename { get; set; }
[XmlElement(ElementName = "startdttm")]
public string startdttm { get; set; }
[XmlElement(ElementName = "enddttm")]
public string enddttm { get; set; }
}
Xaml:
<pre>
<?xml version="1.0"?>
<ArrayOfAllList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<AllList>
<DdmPkgStateTable>
<pkgstate>TO_BE_DELIVERED</pkgstate>
<statedttm>2017-03-07T02:38:08</statedttm>
</DdmPkgStateTable>
<DdmPkgStateTable>
<pkgstate>DELIVERED_XX</pkgstate>
<statedttm>2017-03-07T07:41:28</statedttm>
</DdmPkgStateTable>
<DDMTable>
<table_id>5990105</table_id>
<pkg_id>-1222254826</pkg_id>
<table_code>1010</table_code>
<tablename>X_SUBS_ATR_VALUES</tablename>
<startdttm>20170625000000</startdttm>
<enddttm>20170625235959</enddttm>
</DDMTable>
<DDMTable>
<table_id>6129605</table_id>
<pkg_id>-1222254826</pkg_id>
<table_code>1010</table_code>
<tablename>X_SUBS_ATR_VALUES</tablename>
<startdttm>20170625000000</startdttm>
<enddttm>20170625235959</enddttm>
</DDMTable>
</AllList>
<AllList>
<DdmPkgStateTable>
<pkgstate>LOADED_TO_STG_ODS</pkgstate>
<statedttm>2017-06-28T10:10:59</statedttm>
</DdmPkgStateTable>
<DdmPkgStateTable>
<pkgstate>TO_BE_DELIVERED</pkgstate>
<statedttm>2017-06-26T03:33:28</statedttm>
</DdmPkgStateTable>
<DDMTable>
<table_id>352608</table_id>
<pkg_id>809624076</pkg_id>
<table_code>117</table_code>
<tablename>VIRTUAL_PAYMENTS</tablename>
<startdttm>20170205020518</startdttm>
<enddttm>20170307020518</enddttm>
</DDMTable>
<DDMTable>
<table_id>352619</table_id>
<pkg_id>809624076</pkg_id>
<table_code>1000</table_code>
<tablename>V_RTK$RTPL_EKHD_SHPD</tablename>
<startdttm>20170205020518</startdttm>
<enddttm>20170307020518</enddttm>
</DDMTable>
</AllList>
</ArrayOfAllList>
<code>
Сохраняю:
public void SerializeObject<T>(T serializableObject, string fileName)
{
if (serializableObject == null) { return; }
try
{
XmlDocument xmlDocument = new XmlDocument();
XmlSerializer serializer = new XmlSerializer(serializableObject.GetType());
using (MemoryStream stream = new MemoryStream())
{
serializer.Serialize(stream, serializableObject);
stream.Position = 0;
xmlDocument.Load(stream);
xmlDocument.Save(fileName);
stream.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
Загружаю
public T DeSerializeObject<T>(string fileName)
{
if (string.IsNullOrEmpty(fileName)) { return default(T); }
T objectOut = default(T);
try
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(fileName);
string xmlString = xmlDocument.OuterXml;
using (StringReader read = new StringReader(xmlString))
{
Type outType = typeof(T);
XmlSerializer serializer = new XmlSerializer(outType);
using (XmlReader reader = new XmlTextReader(read))
{
objectOut = (T)serializer.Deserialize(reader);
reader.Close();
}
read.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return objectOut;
}
Вот сделал по коду ниже все равно данные из файла не считываются, подозреваю проблема может быть в том что я их туда не правильно складываю. Не понятно какая должна быть структура в финале
Измените определение данных
[XmlRoot(ElementName = "ArrayOfAllList")]
public class AllList
{
//[XmlElement(ElementName = "DdmPkgStateTable")]
[XmlArray("DdmPkgStateTable")]
[XmlArrayItem("DdmPkgState")]
public List<DdmPkgStateTable> ListDdmPkgStateTable = new List<DdmPkgStateTable>();
//[XmlElement(ElementName = "DDMTable")]
[XmlArray("DDMTable")]
[XmlArrayItem("DDMTableItem")]
public List<DDMTable> ListDDMTable = new List<DDMTable>();
...
Не нужны все эти XmlDocument
, MemoryStream
, StringReader
... Незачем гонять данные из объекта в объект. Пишем и читаем сразу в/из файловый поток:
public void SerializeObject<T>(T serializableObject, string fileName)
{
if (serializableObject == null)
return;
try
{
var serializer = new XmlSerializer(serializableObject.GetType());
using (var stream = new FileStream(fileName, FileMode.Create))
{
serializer.Serialize(stream, serializableObject);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
public T DeSerializeObject<T>(string fileName)
{
if (string.IsNullOrEmpty(fileName))
return default(T);
T objectOut = default(T);
try
{
using (var stream = new FileStream(fileName, FileMode.Open))
{
var serializer = new XmlSerializer(typeof(T));
objectOut = (T)serializer.Deserialize(stream);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return objectOut;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Используется Visual Studio 2015; Devexpress 171
Есть терминальный сервер нужно: 1Программно получить список всех пользователей запущенных на компьютере (как в диспетчере задач Windows) 2
Подскажите можно как-нибудь удалить разделы реестра используя List<string> ?