Классы и интерфейсы в S#~/topic/1162/klassy-i-interfeisy-v-s/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T09:16:37Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/posts/m/4171/Спасибо, Михаил. 1. Моих нервов не хватало. 2. Выглядит проще обычной сериализации, потихоньку буду ...2010-10-12T09:40:53Z2010-10-12T09:40:53Zanotharhttps://stocksharp.ru/users/6089/info@stocksharp.ruСпасибо, Михаил.<br />1. Моих нервов не хватало.<br />2. Выглядит проще обычной сериализации, потихоньку буду разбираться. Буду в дальнейшем пользоваться Вашей библиотекой, но пока оставлю свой код, ибо негоже просто так переделывать код.<br />3. Нет. Но после Вашего вопроса вспомнил, что пару раз я это замечал. Я всегда путаюсь с XmlSerializer, BinaryFormatter и SoapFormatter. Почему-то в книгах чаще упоминают последние два[biggrin] Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/4168/1. Стандартная сериализация позволяет контролировать только весь процесс в целом, а не какое-то отде...2010-10-12T09:17:01Z2010-10-12T09:17:01ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru1. Стандартная сериализация позволяет контролировать только весь процесс в целом, а не какое-то отдельное поле. Да и реализовать интерфейс IXmlSerializable мягко говоря не для слабонервных.<br /><br />2. <br /><div class="code"><strong>Код</strong><div class="innercode">public class ErrorInfo<br />{<br /> [Field("error")]<br /> public string Info { get; set; }<br />}<br /><br />var ser = new XmlSerializer<ErrorInfo>();<br />ser.Deserialize(s);</div></div><br /><br />3. Вы в курсе, что атрибут Serializable никаким образом не относится к XmlSerializer?Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/4149/На метаданных (атрибуты или xml). Отличается наличием конвертеров. Например, сложные типы (картинки,...2010-10-09T16:49:13Z2010-10-09T16:49:13Zanotharhttps://stocksharp.ru/users/6089/info@stocksharp.ru<div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">На метаданных (атрибуты или xml). Отличается наличием конвертеров. Например, сложные типы (картинки, шифрованные строчки, сетевые адреса) в xml так просто не запихать. Приходится создавать структуру только для сериализации, где такие типы упакованы в примитивный формат (строка, число). Ecng.Serialization использует конвертеры на поля. Он превращает сложный тип в простой при сериализации и наоборот.</div></div><br />Вроде в стандартной сериализации можно реализовать свою сериализацию-то есть переопределить целиком. Но это как-то геморно. Я пробовал и не получилось, так что наверняка утверждать не буду.<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">И еще одно большое отличие - SerializatonItem. Это древовидная структура, которая содержит данные для записи в файл (или только то прочитанные из). Плюс в том, что эти данные можно потом передавать куда угодно. И записывать как угодно. Со стандартными сериализаторами такое не прокатит.</div></div><br />А это не аналог ли XmlDocument?<br />Вот пример из моего кода:<br /><div class="code"><strong>Код</strong><div class="innercode"><br />[Serializable]<br /> public class ErrorCallback:ServerCallback<br /> {<br /> private static XmlSerializer _serializer = new XmlSerializer(typeof(ErrorCallback));<br /><br /> [XmlElement("error")]<br /> public String Error<br /> {<br /> get;<br /> set;<br /> }<br /><br /> public static ErrorCallback FromXmlString(String s)<br /> {<br /> s = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<ErrorCallback>"+s<br /> +"</ErrorCallback>";<br /> using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(s)))<br /> {<br /> return (ErrorCallback)_serializer.Deserialize(stream);<br /><br /> }<br /> }<br /> }<br /></div></div><br />Пока времени не было чтобы начать реализовать iTrader. Это пример прямо из кода использования стандартной десериализации для callback. для отправки команд я сериализую ручками( для десериализации бы это потребовало очень много времени). Вот пример xml ки которую должна парсить эта функция:<br /><div class="code"><strong>Код</strong><div class="innercode"><br /><error>Описание ошибки</error><br /></div></div><br />Напишите, пожалуйста, пример того как это будет выглядеть при Вашей десериализации. Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/4147/А можно поподробней. чем она отличается от стандартной? В стандартной можно контролировать названия ...2010-10-08T20:35:04Z2010-10-08T20:35:04ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<div class="quote"><span class="quotetitle">Андрей Ефимов</span><div class="innerquote">А можно поподробней. чем она отличается от стандартной? В стандартной можно контролировать названия полей с помощью атрибутов. На чем основана ваша собственная сериализация/десериализация?</div></div><br /><br />На метаданных (атрибуты или xml). Отличается наличием конвертеров. Например, сложные типы (картинки, шифрованные строчки, сетевые адреса) в xml так просто не запихать. Приходится создавать структуру только для сериализации, где такие типы упакованы в примитивный формат (строка, число). Ecng.Serialization использует конвертеры на поля. Он превращает сложный тип в простой при сериализации и наоборот.<br /><br />И еще одно большое отличие - SerializatonItem. Это древовидная структура, которая содержит данные для записи в файл (или только то прочитанные из). Плюс в том, что эти данные можно потом передавать куда угодно. И записывать как угодно. Со стандартными сериализаторами такое не прокатит.<br /><br />Пришлите мне какой-нить юз кейс из транзака и как Вы хотите его использовать с типом S#, а я вставлю код для работы через Ecng.Serialization.<br /><br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/4124/Интересно, а что, там названия у нод и атрибутов любые могут быть? Название полей и атрибутов можно ...2010-10-07T12:52:16Z2010-10-07T12:52:16Zanotharhttps://stocksharp.ru/users/6089/info@stocksharp.ru<div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">Интересно, а что, там названия у нод и атрибутов любые могут быть?</div></div><br />Название полей и атрибутов можно контролировать с помощью XmlElement/XmlAttribute. нет названия у меня более понятные. Если поле уж совсем корявое то я обычно делаю нормальное поле. кот не сериализую/десериализую и ПолеAsString кот и сериализуется/десериализуется.<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">Согласен. Я использую свою сериализацию на основе Ecng.Serialization. Отличается от стандартной тем, что можно контролировать процесс сериализации. </div></div><br />А можно поподробней. чем она отличается от стандартной? В стандартной можно контролировать названия полей с помощью атрибутов. На чем основана ваша собственная сериализация/десериализация?<br /><div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote">Так что для себя я решил. Создание нового трейдера начинается с тотальной обертки АПИ. И эта обертка никак не использует типы S#.</div></div><br />Если были бы интерфейсы, а не классы то в моем случае можно было бы создать и на основе интерфейсов S#. Впринципе добавить еще одно поле при стандартной десериализации несложно.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/4121/Нет, боже упаси это делать ручками. Да через сериалайзер. Интересно, а что, там названия у нод и атр...2010-10-07T12:28:32Z2010-10-07T12:28:32ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<div class="quote"><span class="quotetitle">Андрей Ефимов</span><div class="innerquote">Нет, боже упаси это делать ручками. Да через сериалайзер.<br /></div></div><br /><br />Интересно, а что, там названия у нод и атрибутов любые могут быть? Или Вы поля у сущности назвали так же, как принято у Транзака? Если второе, то это не очень хорошо. Я раньше так же начинал с Квиком, делать десериализацию ДДЕ данных сразу в сущности. Потом такие траблы начались ввиде больших переделок на добавление нового поля.<br /><br />Так что для себя я решил. Создание нового трейдера начинается с тотальной обертки АПИ. И эта обертка никак не использует типы S#. А сам трейдер лишь делает конвертацию данных туда и обратно.<br /><br /><div class="quote"><span class="quotetitle">Андрей Ефимов</span><div class="innerquote"><br />Тут основная проблема в том, что я не смогу переопределить сериализацию у Ваших типов( ну или это будет весьма геморно), точнее у их полей.</div></div><br /><br />Согласен. Я использую свою сериализацию на основе Ecng.Serialization. Отличается от стандартной тем, что можно контролировать процесс сериализации.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/4117/Нет, боже упаси это делать ручками. Да через сериалайзер. Только сейчас пришла идея делать через xsl...2010-10-07T10:19:17Z2010-10-07T10:21:08Zanotharhttps://stocksharp.ru/users/6089/info@stocksharp.ruНет, боже упаси это делать ручками. Да через сериалайзер. Только сейчас пришла идея делать через xslt-тогда можно все привести к базовому классу. но уже поздно-код написан, да медленная это вещь. и не говорите- изобрели блин да не тем местом, колеса вдруг стали квадратными. один способо как с этим побороться я знаю-создать новый класс, производный от Вашего и написать в моем классе метод преобразования к этому классу, мне он не нравится тем что мне еще придется плодить классы, может у Вас есть предложение как это реализовать без создания еще новых классов? Тут основная проблема в том, что я не смогу переопределить сериализацию у Ваших типов( ну или это будет весьма геморно), точнее у их полей.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/4115/ почему Candle абстрактный, Потому что это базовый класс. Обычно под счетчками подрузомевают временн...2010-10-07T09:52:41Z2010-10-07T09:52:41ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<div class="quote"><span class="quotetitle">Андрей Ефимов</span><div class="innerquote"><br />почему Candle абстрактный,<br /></div></div><br /><br />Потому что это базовый класс. Обычно под счетчками подрузомевают временные. Для них как раз есть проивзодный от Candle класс - TimeFrameCandle.<br /><br /><div class="quote"><span class="quotetitle">Андрей Ефимов</span><div class="innerquote"><br />почему в itrader передаются не интерфейсы, а классы( например Candle а можно было сделать просто ICandle?).<br /></div></div><br /><br />Там где нет реализации - использую интерфейсы. Там где есть - использую классы.<br /><br /><div class="quote"><span class="quotetitle">Андрей Ефимов</span><div class="innerquote"><br />Transaq Connector сделан по-дурацки он обменивается с программой неполноценными xml(зачем они эту ересь сделали не представляю-руки бы поотрывал тому кто это придумал).<br /></div></div><br /><br />Товарщини изобрели веб сервис[biggrin] <br /><br /><div class="quote"><span class="quotetitle">Андрей Ефимов</span><div class="innerquote"><br />Поэтому я написал свои типы которые сериализуются и десериализуются.<br /></div></div><br /><br />Ручками или какой-то спец механизм, аля XmlSerializer?<br /><br /><div class="quote"><span class="quotetitle">Андрей Ефимов</span><div class="innerquote"><br />Встал вопрос совместимости с вашими типами. Унаследовать от Ваших классов не могу( мне же нужно сериализовать или десериализовать-а делаю это с помощью атрибутов). Были бы интерфейсы-никаких проблем. Эту проблему я конечно обойду-напишу преобразование типов. Но хочется чтобы пользователь имел доступ к дополнительным данным( ведь коннектор впринципе по некоторым полям передает больше значений).<br /></div></div><br /><br />Расскажите по подробнее о механизме сериализации и как это работает в транзаке. Попробую предложить решение.<br /><br /><div class="quote"><span class="quotetitle">Андрей Ефимов</span><div class="innerquote"><br />Тогда конкретная реализация зависела бы коннектора и могла учитывать какие-то его особенности или нести доп. поля.</div></div><br /><br />Доп поля записываются через ExtensionInfo<br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/4107/Михаил, я начал писать реализацию iTrader для S#, точнее пока только написал вроппер вокруг их библи...2010-10-07T07:21:05Z2010-10-07T07:21:05Zanotharhttps://stocksharp.ru/users/6089/info@stocksharp.ruМихаил, я начал писать реализацию iTrader для S#, точнее пока только написал вроппер вокруг их библиотеки. И возникли некоторые вопросы по поводу дизайна базовых типов, а именно:<br />почему Candle абстрактный, почему в itrader передаются не интерфейсы, а классы( например Candle а можно было сделать просто ICandle?). Вопросы эти возникли по следующей причине:<br />Transaq Connector сделан по-дурацки он обменивается с программой неполноценными xml(зачем они эту ересь сделали не представляю-руки бы поотрывал тому кто это придумал). Поэтому я написал свои типы которые сериализуются и десериализуются. Встал вопрос совместимости с вашими типами. Унаследовать от Ваших классов не могу( мне же нужно сериализовать или десериализовать-а делаю это с помощью атрибутов). Были бы интерфейсы-никаких проблем. Эту проблему я конечно обойду-напишу преобразование типов. Но хочется чтобы пользователь имел доступ к дополнительным данным( ведь коннектор впринципе по некоторым полям передает больше значений). Итого: предлагаю Вам рассмотреть возможность использования только интерфейсов в iTrader. Тогда конкретная реализация зависела бы коннектора и могла учитывать какие-то его особенности или нести доп. поля.Copyright @ StockSharp Platform LLC 2010 - 2024