Всем привет. Сталкивался ли кто с проблемой маппинга xml в объект C#? Сериализация не подходит. Если кто знает, поделитесь опытом и знанием. В интернете нашел книгу Mapping XML to C# Objects Using Reflection(Amazon) возможно это то, что надо, но найти чтобы скачать не удалось.
Здравствуйте, Дмитрий Ф., Вы писали:
ДФ>Всем привет. Сталкивался ли кто с проблемой маппинга xml в объект C#? Сериализация не подходит. Если кто знает, поделитесь опытом и знанием.
А в чём именно проблема?
Берёшь любую подходящую XML-технологию (XmlDocument, XPathNavigator, XLinq и т.п.) и маппишь на объект.
Здравствуйте, Andir, Вы писали:
A>Здравствуйте, Дмитрий Ф., Вы писали:
ДФ>>Всем привет. Сталкивался ли кто с проблемой маппинга xml в объект C#? Сериализация не подходит. Если кто знает, поделитесь опытом и знанием.
A>А в чём именно проблема? A>Берёшь любую подходящую XML-технологию (XmlDocument, XPathNavigator, XLinq и т.п.) и маппишь на объект.
A>С Уважением, Andir!
XmlDocument, так же как и другие классы работающие с DOM, файлы могут занимать большие объемы, нужна реализация например с использованием XmlTextReader
Здравствуйте, Дмитрий Ф., Вы писали:
ДФ>XmlDocument, так же как и другие классы работающие с DOM, файлы могут занимать большие объемы, нужна реализация например с использованием XmlTextReader
Ну так сделай с использованием ридера. В чём проблема-то?
почему не подходит сериализация? если она и будет работать медленне чем написаный код, то не на много, так как для сериализации один раз генерится код при сборке сборки( =) ).
если проблема в том, что схема xml не совсем совдатает с той, что нужна для сериализации объекта, то можно написать xslt которые преобразует исходный xml в тот, из которого можно десериализовать объект.
Здравствуйте, Дмитрий Ф., Вы писали:
ДФ>Всем привет. Сталкивался ли кто с проблемой маппинга xml в объект C#? Сериализация не подходит.
напоминает "чёрный, на трёх ножках, но не рояль".
вы бы описали суть проблемы, чтобы было из чего выбирать.
Здравствуйте, sinister, Вы писали:
S>почему не подходит сериализация? если она и будет работать медленне чем написаный код, то не на много, так как для сериализации один раз генерится код при сборке сборки( =) ).
Ну если делать "руками" согласно советам из книги Mapping XML to C# Objects Using Reflection, то сериализация будет даже быстрее.
Здравствуйте, Neco, Вы писали:
N>Здравствуйте, Дмитрий Ф., Вы писали:
ДФ>>Всем привет. Сталкивался ли кто с проблемой маппинга xml в объект C#? Сериализация не подходит. N>напоминает "чёрный, на трёх ножках, но не рояль". N>вы бы описали суть проблемы, чтобы было из чего выбирать.
Есть файл XML, занимает ~500Мб, сериализация работать отказывается.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Ну если делать "руками" согласно советам из книги Mapping XML to C# Objects Using Reflection, то сериализация будет даже быстрее.
Не обязательно. Reflection — это же не только System.Reflection, но и System.Reflection.Emit
Здравствуйте, Дмитрий Ф., Вы писали:
N>>вы бы описали суть проблемы, чтобы было из чего выбирать. ДФ>Есть файл XML, занимает ~500Мб, сериализация работать отказывается.
Если xml "плоский", то можно попробовать вот такой подход:
var ser = new XmlSerializer(typeof(Row));
using (var reader = XmlReader.Create("Data.xml")) {
while (reader.Read()) {
if (reader.NodeType == XmlNodeType.Element && reader.Name == "Row") {
using (var rowReader = reader.ReadSubtree()) {
var row = (Row)ser.Deserialize(rowReader);
Console.WriteLine(row);
}
}
}
}
Здравствуйте, Дмитрий Ф., Вы писали:
ДФ>>>Всем привет. Сталкивался ли кто с проблемой маппинга xml в объект C#? Сериализация не подходит. N>>напоминает "чёрный, на трёх ножках, но не рояль". N>>вы бы описали суть проблемы, чтобы было из чего выбирать. ДФ>Есть файл XML, занимает ~500Мб, сериализация работать отказывается.
И что хранится в этом файле? Его нужно обязательно вычитывать весь? Что-то мне кажется, что ХМЛ тут вообще не по адресу.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, Дмитрий Ф., Вы писали:
ДФ>>>>Всем привет. Сталкивался ли кто с проблемой маппинга xml в объект C#? Сериализация не подходит. N>>>напоминает "чёрный, на трёх ножках, но не рояль". N>>>вы бы описали суть проблемы, чтобы было из чего выбирать. ДФ>>Есть файл XML, занимает ~500Мб, сериализация работать отказывается.
ВВ>И что хранится в этом файле? Его нужно обязательно вычитывать весь? Что-то мне кажется, что ХМЛ тут вообще не по адресу.
XML надо читать весь, каждый аттрибут. Вабора насчет формата нет, есть только задача: прочитать файл, раскидать по объектам, записать в базу.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Дмитрий Ф., Вы писали:
N>>>вы бы описали суть проблемы, чтобы было из чего выбирать. ДФ>>Есть файл XML, занимает ~500Мб, сериализация работать отказывается.
L>Если xml "плоский", то можно попробовать вот такой подход: L>
L>var ser = new XmlSerializer(typeof(Row));
L>using (var reader = XmlReader.Create("Data.xml")) {
L> while (reader.Read()) {
L> if (reader.NodeType == XmlNodeType.Element && reader.Name == "Row") {
L> using (var rowReader = reader.ReadSubtree()) {
L> var row = (Row)ser.Deserialize(rowReader);
L> Console.WriteLine(row);
L> }
L> }
L> }
L>}
L>
Здравствуйте, koandrew, Вы писали:
ДФ>>XmlDocument, так же как и другие классы работающие с DOM, файлы могут занимать большие объемы, нужна реализация например с использованием XmlTextReader
K>Ну так сделай с использованием ридера. В чём проблема-то?
А как вам поможет reader в случае больших объемов реляционных данных? Единственное, что он вам даст — это необходимость перечитывать весь файл практически на каждый чих.
XML и большие объемы разумны только в случае потоковой обработки. Все остальные варианты надо либо сводить к потоковой обработке либо, грузить XML в хранилище предоставляющее произвольный доступ к своему содержимому.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, Дмитрий Ф., Вы писали:
ДФ>Всем привет. Сталкивался ли кто с проблемой маппинга xml в объект C#? Сериализация не подходит. Если кто знает, поделитесь опытом и знанием. В интернете нашел книгу Mapping XML to C# Objects Using Reflection(Amazon) возможно это то, что надо, но найти чтобы скачать не удалось.
Посмотрите в сторону ObjectXPathNavigator -- возможно, в вашей задаче можно свести все к манипулированию с xml как для документа, так и для объектов
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, sinister, Вы писали:
S>>почему не подходит сериализация? если она и будет работать медленне чем написаный код, то не на много, так как для сериализации один раз генерится код при сборке сборки( =) ).
ВВ>Ну если делать "руками" согласно советам из книги Mapping XML to C# Objects Using Reflection, то сериализация будет даже быстрее.
А есть ли книга в электронном виде?
Здравствуйте, Дмитрий Ф., Вы писали:
ВВ>>И что хранится в этом файле? Его нужно обязательно вычитывать весь? Что-то мне кажется, что ХМЛ тут вообще не по адресу. ДФ>XML надо читать весь, каждый аттрибут. Вабора насчет формата нет, есть только задача: прочитать файл, раскидать по объектам, записать в базу.
Тогда не совсем понятно, чем не устраивает xml-сериализация?
Здравствуйте, Дмитрий Ф., Вы писали:
ДФ>Здравствуйте, Воронков Василий, Вы писали:
ВВ>>Здравствуйте, Дмитрий Ф., Вы писали:
ДФ>>>>>Всем привет. Сталкивался ли кто с проблемой маппинга xml в объект C#? Сериализация не подходит. N>>>>напоминает "чёрный, на трёх ножках, но не рояль". N>>>>вы бы описали суть проблемы, чтобы было из чего выбирать. ДФ>>>Есть файл XML, занимает ~500Мб, сериализация работать отказывается.
ВВ>>И что хранится в этом файле? Его нужно обязательно вычитывать весь? Что-то мне кажется, что ХМЛ тут вообще не по адресу. ДФ>XML надо читать весь, каждый аттрибут. Вабора насчет формата нет, есть только задача: прочитать файл, раскидать по объектам, записать в базу.
А не легче сделать ХП на сервере, которая будет парсить xml и писать в базу?