наследование от сереализуемого класса
От: Аноним  
Дата: 14.05.06 08:48
Оценка:
Есть сеpеализyемый класс A, сеpеализyется и де- на ypа.
Я желаю pасшиpить его фyнкциональность интеpфейсом, но не хочy пpавить его
самого. Делаю так

public class B: A, IInterface
{
//pеализация методов интеpфейса
}

Ожидаю что B бyдет десеpеализоваться так же как A, но не тyт-то было.
Полyчаю ошибкy в фоpмате XML файла. В чём косяк?
Re: наследование от сереализуемого класса
От: kpumuk Украина http://kpumuk.info/
Дата: 14.05.06 08:55
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Есть сеpеализyемый класс A, сеpеализyется и де- на ypа.

А>Я желаю pасшиpить его фyнкциональность интеpфейсом, но не хочy пpавить его
А>самого. Делаю так

А>public class B: A, IInterface

А>{
А>//pеализация методов интеpфейса
А>}

А>Ожидаю что B бyдет десеpеализоваться так же как A, но не тyт-то было.

А>Полyчаю ошибкy в фоpмате XML файла. В чём косяк?

SerializableAttribute не наследуется. Тебе нужно помечать и дочерние классы:

[Serializable]
public class B: A, IInterface
{
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: наследование от сереализуемого класса
От: Mab Россия http://shade.msu.ru/~mab
Дата: 14.05.06 13:13
Оценка: +1
Здравствуйте, kpumuk, Вы писали:

K>SerializableAttribute не наследуется.

А при чем тут он, если речь про xml-сериализацию?
Re: наследование от сереализуемого класса
От: _FRED_ Черногория
Дата: 15.05.06 08:26
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Есть сеpеализyемый класс A, сеpеализyется и де- на ypа.

А>Я желаю pасшиpить его фyнкциональность интеpфейсом, но не хочy пpавить его
А>самого. Делаю так

[c#]
А>public class B: A, IInterface
А>{
А>//pеализация методов интеpфейса
А>}

[/c#]

А>Ожидаю что B бyдет десеpеализоваться так же как A, но не тyт-то было.

А>Полyчаю ошибкy в фоpмате XML файла. В чём косяк?

Открытый конструктор без параметров в классе B остался? Открытые свойства новые (по-сравнению с A) появились? Покажи пример вызова XmlSerializer?
... << RSDN@Home 1.2.0 alpha rev. 650>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re: наследование от сереализуемого класса
От: ghen Беларусь  
Дата: 15.05.06 10:59
Оценка:
SerializableAttribute не наследуется.

А ещё есть такая штука как MSDN....
Re: Быстрая смена версии
От: lonli Беларусь  
Дата: 15.05.06 16:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть сеpеализyемый класс A, сеpеализyется и де- на ypа.

А>Я желаю pасшиpить его фyнкциональность интеpфейсом, но не хочy пpавить его
А>самого. Делаю так

А>public class B: A, IInterface

А>{
А>//pеализация методов интеpфейса
А>}

А>Ожидаю что B бyдет десеpеализоваться так же как A, но не тyт-то было.

А>Полyчаю ошибкy в фоpмате XML файла. В чём косяк?
1) Ты пытаешься десериализовать старый файл, созданный без интерфейса
2) Ты испортил файл(попробуй открой в Експлорере, ругаться не должен
3) Ты пытаешься десериализовать файл, не определив сеттеры в интерфейсе и самом классе
4) Ты не определил открытого конструктора в классе A(он должен быть без параметров вроде бы...)
5) еще что-то... Пиши ексепшн :)
Re[2]: наследование от сереализуемого класса
От: Torinous Россия  
Дата: 15.05.06 17:09
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, <Аноним>, Вы писали:


А>>Есть сеpеализyемый класс A, сеpеализyется и де- на ypа.

А>>Я желаю pасшиpить его фyнкциональность интеpфейсом, но не хочy пpавить его
А>>самого. Делаю так

_FR>[c#]

_FR>
А>>public class B: A, IInterface
А>>{
А>>//pеализация методов интеpфейса
А>>}
_FR>

_FR>[/c#]

А>>Ожидаю что B бyдет десеpеализоваться так же как A, но не тyт-то было.

А>>Полyчаю ошибкy в фоpмате XML файла. В чём косяк?

_FR>Открытый конструктор без параметров в классе B остался? Открытые свойства новые (по-сравнению с A) появились? Покажи пример вызова XmlSerializer?


Нет класс B реально выглядит как я написал, ничего кроме трёх методов интерфейса.
Класс A это куча вложенных классов полученная с помощью xsd.exe.


 ptnet.pnml net1 = new ptnet.pnml();
 XmlSerializer formatter = new XmlSerializer(net1.GetType());
 XmlTextReader tr = new XmlTextReader( new StringReader(PNMLFile.DocumentElement.OwnerDocument.OuterXml));
 net1 = (ptnet.pnml)formatter.Deserialize(tr);


где ptnet.pnml это класс A, я расчитывал что при замене на B всё также заработает, но...
Re[2]: Быстрая смена версии
От: Torinous Россия  
Дата: 15.05.06 17:15
Оценка:
Здравствуйте, lonli, Вы писали:

L>Здравствуйте, Аноним, Вы писали:


А>>Есть сеpеализyемый класс A, сеpеализyется и де- на ypа.

А>>Я желаю pасшиpить его фyнкциональность интеpфейсом, но не хочy пpавить его
А>>самого. Делаю так

А>>public class B: A, IInterface

А>>{
А>>//pеализация методов интеpфейса
А>>}

А>>Ожидаю что B бyдет десеpеализоваться так же как A, но не тyт-то было.

А>>Полyчаю ошибкy в фоpмате XML файла. В чём косяк?
L>1) Ты пытаешься десериализовать старый файл, созданный без интерфейса
Да, но интерфейс такой что не должен влиять на вид сереализованных данных.
L>2) Ты испортил файл(попробуй открой в Експлорере, ругаться не должен
Нет.
L>3) Ты пытаешься десериализовать файл, не определив сеттеры в интерфейсе и самом классе
Не понял о чём речь, по поводу классов посмотри соседнюю ветку.
L>4) Ты не определил открытого конструктора в классе A(он должен быть без параметров вроде бы...)
Действительно не определил, но всё работало и без этого.
L>5) еще что-то... Пиши ексепшн
Материт первую же строку xml файла. Вернее вторую где уже структура а не само определение <?xml
Re[3]: наследование от сереализуемого класса
От: _FRED_ Черногория
Дата: 15.05.06 17:27
Оценка: 1 (1)
Здравствуйте, Torinous, Вы писали:

T>где ptnet.pnml это класс A, я расчитывал что при замене на B всё также заработает, но...


Сравни текст Xml из потока — наверняка в нём упоминается имя класса B
... << RSDN@Home 1.2.0 alpha rev. 650>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[3]: Быстрая смена версии
От: stump http://stump-workshop.blogspot.com/
Дата: 16.05.06 05:08
Оценка:
Здравствуйте, Torinous, Вы писали:

Что ты в прятки играешь. Тебе проблему решить надо или просто пообщаться хочется?
Покажи xml и exception.
Понедельник начинается в субботу
Re[4]: Быстрая смена версии
От: Torinous Россия  
Дата: 16.05.06 11:35
Оценка:
Здравствуйте, stump, Вы писали:

S>Здравствуйте, Torinous, Вы писали:


S>Что ты в прятки играешь. Тебе проблему решить надо или просто пообщаться хочется?

S>Покажи xml и exception.

Просто мне нужно снова переписывать код в неработающем виде чтобы показать.
Да и ничего это не даст, ошибка что-то вроде Wrong XML data и два числа указывающие на символ перевод строки после первой строчки XML файла.

V — сюда.
<?xml version="1.0" encoding="iso-8859-1"?>
<pnml>...

Всё это нужно для десереализации сереализация как таковая меня не интересует.

PS. А тебе что пообщаться влом.
PPS. Кстати почему сменилась тема?
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[5]: Быстрая смена версии
От: stump http://stump-workshop.blogspot.com/
Дата: 16.05.06 11:55
Оценка: 2 (1)
Здравствуйте, Torinous, Вы писали:

T>Здравствуйте, stump, Вы писали:


S>>Здравствуйте, Torinous, Вы писали:


S>>Что ты в прятки играешь. Тебе проблему решить надо или просто пообщаться хочется?

S>>Покажи xml и exception.

T>Просто мне нужно снова переписывать код в неработающем виде чтобы показать.

T>Да и ничего это не даст, ошибка что-то вроде Wrong XML data и два числа указывающие на символ перевод строки после первой строчки XML файла.

T> V — сюда.

T><?xml version="1.0" encoding="iso-8859-1"?>
T><pnml>...

T>Всё это нужно для десереализации сереализация как таковая меня не интересует.


T> PS. А тебе что пообщаться влом.

T> PPS. Кстати почему сменилась тема?
Общаться мне не влом, просто времени мало, да и стоит оно у меня достаточно дорого. Тем не менее считаю что людям надо помогать. А отстутствие достаточно информации мешает это сделать.
По существу вопроса.
Тебе надо копать в направлении аттрибутов XmlIncludeAttribute и XmlRootAttribute.
XmlIncludeAttribute используется для указания наследников данного класса которые могут быть десериализованы. В твоих терминах этот атрибут надо повесить над классом А и указать в нем тип класса В.
Можно попробовать тупо повесить атрибут XmlRootAttribute над классом В и прописать в нем имя xml элемента который надо десериализовать (поскольку надо полагать имя класса и имя xml у тебя не совпадают).
Понедельник начинается в субботу
Re[6]: Быстрая смена версии
От: Torinous Россия  
Дата: 16.05.06 15:07
Оценка:
Здравствуйте, stump, Вы писали:

S>>>Здравствуйте, Torinous, Вы писали:


S>>>Что ты в прятки играешь. Тебе проблему решить надо или просто пообщаться хочется?

S>>>Покажи xml и exception.

T>>Просто мне нужно снова переписывать код в неработающем виде чтобы показать.

T>>Да и ничего это не даст, ошибка что-то вроде Wrong XML data и два числа указывающие на символ перевод строки после первой строчки XML файла.

T>> V — сюда.

T>><?xml version="1.0" encoding="iso-8859-1"?>
T>><pnml>...

T>>Всё это нужно для десереализации сереализация как таковая меня не интересует.


T>> PS. А тебе что пообщаться влом.

T>> PPS. Кстати почему сменилась тема?
S>Общаться мне не влом, просто времени мало, да и стоит оно у меня достаточно дорого. Тем не менее считаю что людям надо помогать. А отстутствие достаточно информации мешает это сделать.
S>По существу вопроса.
S>Тебе надо копать в направлении аттрибутов XmlIncludeAttribute и XmlRootAttribute.
S>XmlIncludeAttribute используется для указания наследников данного класса которые могут быть десериализованы. В твоих терминах этот атрибут надо повесить над классом А и указать в нем тип класса В.
S>Можно попробовать тупо повесить атрибут XmlRootAttribute над классом В и прописать в нем имя xml элемента который надо десериализовать (поскольку надо полагать имя класса и имя xml у тебя не совпадают).

Воспользовавшись XmlRootAttribute мне удалось добиться того чего я и хотел, теперь в проекте станет меньше рутины, не придется редактировать автогенерируемые файлы и т.д.
Вот видите мое сопротивление не помешало вам помочь мне , за что большое спасибо.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: наследование от сереализуемого класса
От: Torinous Россия  
Дата: 16.05.06 15:07
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, Torinous, Вы писали:


T>>где ptnet.pnml это класс A, я расчитывал что при замене на B всё также заработает, но...


_FR>Сравни текст Xml из потока — наверняка в нём упоминается имя класса B


Вам тоже спасибо, ваше письмо навело меня на мысль о моей ошибке.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.