Как сериализовать данные в xml с аттрибутами элемента?

Доброго времени суток,

Пишу маленькую программку, которая принимает excel файл, и переводит его в xml определенным образом, с первой частью проблем не возникло, сохранил таблицу как список объектов, теперь не могу понять как сериализовать файл.

В итоге должно получиться так:
<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="NO_NDS.9_1111_2222_7710000000771001001_20150318_131716" ВерсПрог="[bi-cons.ru] v.1.4" ВерсФорм="5.04">
	<Документ Индекс="0000090" НомКорр="0">
		<КнигаПрод СтПродБезНДС18="134890.16" СтПродБезНДС10="44676.6" СтПродБезНДС0="14400" СумНДСВсКПр18="24280.24" СумНДСВсКПр10="4467.66" СтПродОсвВсКПр="4000">
			<КнПродСтр НомерПор="1" НомСчФПрод="15/030001" ДатаСчФПрод="15.01.2015" СтоимПродСФВ="29665.2" СтоимПродСФ="29665.2" СтоимПродСФ18="25140" СумНДССФ18="4525.2">
				<КодВидОпер>01</КодВидОпер>
				<СвПокуп>
					<СведЮЛ ИННЮЛ="7723000000" КПП="772301001"/>
				</СвПокуп>
			</КнПродСтр>
			<КнПродСтр НомерПор="2" НомСчФПрод="15/030002" ДатаСчФПрод="16.01.2015" ОКВ="978" СтоимПродСФВ="120" СтоимПродСФ="8620" СтоимПродСФ18="7305.08" СумНДССФ18="1314.92">
				<КодВидОпер>04</КодВидОпер>
				<СвПокуп>
					<СведЮЛ ИННЮЛ="7743000000" КПП="774301001"/>
				</СвПокуп>
				<СвПос>
					<СведЮЛ ИННЮЛ="7711000000" КПП="771101001"/>
				</СвПос>
			</КнПродСтр>
			<КнПродСтр НомерПор="3" НомСчФПрод="15/030003" ДатаСчФПрод="21.01.2015" СтоимПродСФВ="8030" СтоимПродСФ="8030" СтоимПродСФ18="6805.08" СумНДССФ18="1224.92">
				<КодВидОпер>02</КодВидОпер>
				<ДокПдтвОпл НомДокПдтвОпл="121" ДатаДокПдтвОпл="19.01.2015"/>
				<СвПокуп>
					<СведЮЛ ИННЮЛ="7730000000" КПП="773001001"/>
				</СвПокуп>
			</КнПродСтр>
			<КнПродСтр НомерПор="4" НомСчФПрод="15/030004" ДатаСчФПрод="26.01.2015" НомКСчФПрод="15/030011" ДатаКСчФПрод="11.02.2015" СтоимПродСФВ="49144.26" СтоимПродСФ="49144.26" СтоимПродСФ10="44676.6" СумНДССФ10="4467.66">
				<КодВидОпер>01</КодВидОпер>
				<СвПокуп>
					<СведЮЛ ИННЮЛ="6501000000" КПП="650101001"/>
				</СвПокуп>
			</КнПродСтр>
			<КнПродСтр НомерПор="5" НомСчФПрод="15/030005" ДатаСчФПрод="26.01.2015" СтоимПродСФВ="12400" СтоимПродСФ="12400" СтоимПродСФ0="12400">
				<КодВидОпер>01</КодВидОпер>
				<СвПокуп>
					<СведЮЛ ИННЮЛ="5403000000" КПП="540301001"/>
				</СвПокуп>
			</КнПродСтр>
			<КнПродСтр НомерПор="6" НомСчФПрод="15/030006" ДатаСчФПрод="29.01.2015" СтоимПродСФВ="103875.2" СтоимПродСФ="103875.2" СтоимПродСФ18="84640" СумНДССФ18="15235.2" СтоимПродОсв="4000">
				<КодВидОпер>01</КодВидОпер>
				<СвПокуп>
					<СведИП ИННФЛ="772400000012"/>
				</СвПокуп>
			</КнПродСтр>
			<КнПродСтр НомерПор="7" НомСчФПрод="15/030007" ДатаСчФПрод="30.01.2015" СтоимПродСФВ="14980" СтоимПродСФ="14980" СтоимПродСФ18="11000" СтоимПродСФ0="2000" СумНДССФ18="1980">
				<КодВидОпер>01</КодВидОпер>
				<СвПокуп>
					<СведЮЛ ИННЮЛ="7724000000" КПП="772401001"/>
				</СвПокуп>
			</КнПродСтр>
		</КнигаПрод>
	</Документ>
</Файл>


Основные непонятки:
1) Как добавлять новые объекты в файл
2) Как добавить аттрибуты элементу

на данный момент реализованно так:
private void SaveAsXML(SalesBook salesbook, string filename)
        {
            using (FileStream fs = new FileStream(filename, FileMode.Append))
            {
                XmlSerializer xser = new XmlSerializer(typeof(SalesBook));
                xser.Serialize(fs, salesbook);
                fs.Close();
            }
        }

List<SalesBook> _salesbook = FillList(openFileDialog.FileName);
            foreach(SalesBook a in _salesbook)
            {
                SaveAsXML(a, "\\SalesBook.xml");
            }
  • Вопрос задан
  • 510 просмотров
Решения вопроса 1
vpuhoff
@vpuhoff
Программист в свободное от работы время
Вот твой класс (пруф), пользуй его потом сериализуй
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace Xml2CSharp
{
	[XmlRoot(ElementName="СведЮЛ")]
	public class СведЮЛ {
		[XmlAttribute(AttributeName="ИННЮЛ")]
		public string ИННЮЛ { get; set; }
		[XmlAttribute(AttributeName="КПП")]
		public string КПП { get; set; }
	}

	[XmlRoot(ElementName="СвПокуп")]
	public class СвПокуп {
		[XmlElement(ElementName="СведЮЛ")]
		public СведЮЛ СведЮЛ { get; set; }
		[XmlElement(ElementName="СведИП")]
		public СведИП СведИП { get; set; }
	}

	[XmlRoot(ElementName="КнПродСтр")]
	public class КнПродСтр {
		[XmlElement(ElementName="КодВидОпер")]
		public string КодВидОпер { get; set; }
		[XmlElement(ElementName="СвПокуп")]
		public СвПокуп СвПокуп { get; set; }
		[XmlAttribute(AttributeName="НомерПор")]
		public string НомерПор { get; set; }
		[XmlAttribute(AttributeName="НомСчФПрод")]
		public string НомСчФПрод { get; set; }
		[XmlAttribute(AttributeName="ДатаСчФПрод")]
		public string ДатаСчФПрод { get; set; }
		[XmlAttribute(AttributeName="СтоимПродСФВ")]
		public string СтоимПродСФВ { get; set; }
		[XmlAttribute(AttributeName="СтоимПродСФ")]
		public string СтоимПродСФ { get; set; }
		[XmlAttribute(AttributeName="СтоимПродСФ18")]
		public string СтоимПродСФ18 { get; set; }
		[XmlAttribute(AttributeName="СумНДССФ18")]
		public string СумНДССФ18 { get; set; }
		[XmlElement(ElementName="СвПос")]
		public СвПос СвПос { get; set; }
		[XmlAttribute(AttributeName="ОКВ")]
		public string ОКВ { get; set; }
		[XmlElement(ElementName="ДокПдтвОпл")]
		public ДокПдтвОпл ДокПдтвОпл { get; set; }
		[XmlAttribute(AttributeName="НомКСчФПрод")]
		public string НомКСчФПрод { get; set; }
		[XmlAttribute(AttributeName="ДатаКСчФПрод")]
		public string ДатаКСчФПрод { get; set; }
		[XmlAttribute(AttributeName="СтоимПродСФ10")]
		public string СтоимПродСФ10 { get; set; }
		[XmlAttribute(AttributeName="СумНДССФ10")]
		public string СумНДССФ10 { get; set; }
		[XmlAttribute(AttributeName="СтоимПродСФ0")]
		public string СтоимПродСФ0 { get; set; }
		[XmlAttribute(AttributeName="СтоимПродОсв")]
		public string СтоимПродОсв { get; set; }
	}

	[XmlRoot(ElementName="СвПос")]
	public class СвПос {
		[XmlElement(ElementName="СведЮЛ")]
		public СведЮЛ СведЮЛ { get; set; }
	}

	[XmlRoot(ElementName="ДокПдтвОпл")]
	public class ДокПдтвОпл {
		[XmlAttribute(AttributeName="НомДокПдтвОпл")]
		public string НомДокПдтвОпл { get; set; }
		[XmlAttribute(AttributeName="ДатаДокПдтвОпл")]
		public string ДатаДокПдтвОпл { get; set; }
	}

	[XmlRoot(ElementName="СведИП")]
	public class СведИП {
		[XmlAttribute(AttributeName="ИННФЛ")]
		public string ИННФЛ { get; set; }
	}

	[XmlRoot(ElementName="КнигаПрод")]
	public class КнигаПрод {
		[XmlElement(ElementName="КнПродСтр")]
		public List<КнПродСтр> КнПродСтр { get; set; }
		[XmlAttribute(AttributeName="СтПродБезНДС18")]
		public string СтПродБезНДС18 { get; set; }
		[XmlAttribute(AttributeName="СтПродБезНДС10")]
		public string СтПродБезНДС10 { get; set; }
		[XmlAttribute(AttributeName="СтПродБезНДС0")]
		public string СтПродБезНДС0 { get; set; }
		[XmlAttribute(AttributeName="СумНДСВсКПр18")]
		public string СумНДСВсКПр18 { get; set; }
		[XmlAttribute(AttributeName="СумНДСВсКПр10")]
		public string СумНДСВсКПр10 { get; set; }
		[XmlAttribute(AttributeName="СтПродОсвВсКПр")]
		public string СтПродОсвВсКПр { get; set; }
	}

	[XmlRoot(ElementName="Документ")]
	public class Документ {
		[XmlElement(ElementName="КнигаПрод")]
		public КнигаПрод КнигаПрод { get; set; }
		[XmlAttribute(AttributeName="Индекс")]
		public string Индекс { get; set; }
		[XmlAttribute(AttributeName="НомКорр")]
		public string НомКорр { get; set; }
	}

	[XmlRoot(ElementName="Файл")]
	public class Файл {
		[XmlElement(ElementName="Документ")]
		public Документ Документ { get; set; }
		[XmlAttribute(AttributeName="ИдФайл")]
		public string ИдФайл { get; set; }
		[XmlAttribute(AttributeName="ВерсПрог")]
		public string ВерсПрог { get; set; }
		[XmlAttribute(AttributeName="ВерсФорм")]
		public string ВерсФорм { get; set; }
	}

}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы