Как сериализовать объект типа DateTimeFormatInfo?
Я хочу сериализовать объект типа DatetimeFormatInfo.
Я попробовал следующий код:
DateTimeFormatInfo dateTimeFormat = new DateTimeFormatInfo();
dateTimeFormat.ShortDatePattern = "dd-MMM-yy";
xs = new XmlSerializer(dateTimeFormat.GetType());
StreamWriter sw = new StreamWriter("Setting.xml");
xs.Serialize(sw, dateTimeFormat);
Но это бросает следующее исключение.
Исключение System.InvalidOperationException не обработано.
Произошла ошибка при создании документа XML.
Тип System.Globalization.GregorianCalendar не ожидался.
Используйте атрибут XmlInclude или SoapInclude, чтобы указать типы, которые не известны статически.
Что-нибудь, что мне нужно добавить для сериализации DateTimeFormatInfo?
1 ответ
Решение
Вы должны включить в XmlSerializer
список зависимых типов объектов для сериализации. В вашем случае вам нужно добавить тип объекта System.Globalization.GregorianCalendar
,
System.Globalization.DateTimeFormatInfo dateTimeFormat = new System.Globalization.DateTimeFormatInfo();
dateTimeFormat.ShortDatePattern = "dd-MMM-yy";
// Add here all the extra types you need to serialize
Type[] extraTypes = new Type[] { typeof(System.Globalization.GregorianCalendar) };
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(dateTimeFormat.GetType(), extraTypes);
System.IO.StreamWriter sw = new System.IO.StreamWriter(@"c:\testso.xml");
xs.Serialize(sw, dateTimeFormat);