[Serializable]
public class Test
{
private readonly int intValue;
public int IntValue
{
get { return this.intValue; }
}
public Test(int intValue)
{
this.intValue = intValue;
}
public Test()
{
}
}
private static string ObjectToXMLString<T>(T obj)
{
var ns = new XmlSerializerNamespaces();
ns.Add("", "");
var xws = new XmlWriterSettings
{
OmitXmlDeclaration = true,
NewLineHandling = NewLineHandling.Entitize,
Indent = false
};
var writer = new XmlSerializer(typeof(T));
var sb = new StringBuilder();
using (var sw = new StringWriter(sb))
{
using (XmlWriter xw = XmlTextWriter.Create(sw, xws))
{
writer.Serialize(xw, obj, ns);
return sb.ToString();
}
}
}
Где то в коде:
Test test = new Test(4711);
string xml_test = ObjectToXMLString(test);
Строка xml_test принимает вид: "<Test />", что в принципе логично: ни одного read-write свойства нет. Однако класс string это как то делает?
Здравствуйте, <Аноним>, Вы писали:
А>Хотелось бы узнать как. Интерфейс IXmlSerializable класс string вроде не поддерживает. А>Куда копать уважаемые знатоки?
Код для строки может быть тупо захардкожен.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re: И снова сериализация
От:
Аноним
Дата:
23.10.08 15:47
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Пытаюсь сериализировать такой класс:
А>
А>[Serializable]
А>public class Test
А>{
А> private readonly int intValue;
А> public int IntValue
А> {
А> get { return this.intValue; }
А> }
А> public Test(int intValue)
А> {
А> this.intValue = intValue;
А> }
А> public Test()
А> {
А> }
А>}
А>private static string ObjectToXMLString<T>(T obj)
А>{
А> var ns = new XmlSerializerNamespaces();
А> ns.Add("", "");
А> var xws = new XmlWriterSettings
А> {
А> OmitXmlDeclaration = true,
А> NewLineHandling = NewLineHandling.Entitize,
А> Indent = false
А> };
А> var writer = new XmlSerializer(typeof(T));
А> var sb = new StringBuilder();
А> using (var sw = new StringWriter(sb))
А> {
А> using (XmlWriter xw = XmlTextWriter.Create(sw, xws))
А> {
А> writer.Serialize(xw, obj, ns);
А> return sb.ToString();
А> }
А> }
А>}
А>
А>Где то в коде: А>
А>Test test = new Test(4711);
А>string xml_test = ObjectToXMLString(test);
А>
А>Строка xml_test принимает вид: "<Test />", что в принципе логично: ни одного read-write свойства нет. Однако класс string это как то делает?
А>
А>строка xml_str равна "<string>4712</string>"
А>Хотелось бы узнать как. Интерфейс IXmlSerializable класс string вроде не поддерживает. А>Куда копать уважаемые знатоки?
может я что то не понял но почему бы в сущности которую надо сериализовать/десериализовать просто не добавить атрибуты
like this
[XmlAttribute]
public string Name;
и потом спокойно вызывать
//Объект сериализации
XmlSerializer ser = new XmlSerializer(obj.GetType());
ser.Serialize(source, obj);
И как быть?
Реализовать IXmlSerializable? Многовато таких классов, можно некоторые забыть. Кроме того есть еще и другие сериализаторы, к примеру бинарный
Да, блин, засада
Re[2]: И снова сериализация
От:
Аноним
Дата:
23.10.08 16:29
Оценка:
Здравствуйте, Аноним, Вы писали:
А>может я что то не понял но почему бы в сущности которую надо сериализовать/десериализовать просто не добавить атрибуты А>like this
А>
А>[XmlAttribute]
А>public string Name;
А>
А>и потом спокойно вызывать
А>
А> //Объект сериализации
А> XmlSerializer ser = new XmlSerializer(obj.GetType());
А> ser.Serialize(source, obj);
А>
[Serializable]
public class Test
{
private readonly int intValue;
public int IntValue
{
get { return this.intValue; }
}
public Test(int intValue)
{
this.intValue = intValue;
}
public Test()
{
}
}
Здравствуйте, Воронков Василий, Вы писали: ВВ>Сделать св-во IntValue доступным для записи, если дизайн позволяет.
Если бы это можно было сделать, то и начального вопроса не возникло бы
Здравствуйте, Аноним, Вы писали:
А>Хотелось бы узнать как. Интерфейс IXmlSerializable класс string вроде не поддерживает. А>Куда копать уважаемые знатоки?
String и "=" переопределяет, а для нас он так просто недоступен. Вы же читали документацию к XmlSerializer, там же четкие требования:
1. Публичный конструктор
2. Read-write properties либо на них вешается XmlIgnore.
То есть либо Вы не тот инструмент используете, либо дизайн нарушен. как действовать далее зависит от того, что и как Вы делаете. Одно дело, если униврсальный сериализатор — десериализатор, другое если конкретный слоя для сохранения данных и восстановления и преобразования их в объекты, что-то вроде DAL. Тогда уж и дальше плясать.
--------------------------
less think — do more
Re: И снова сериализация
От:
Аноним
Дата:
24.10.08 02:08
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Пытаюсь сериализировать такой класс: