Подключение xsd-схемы при сериализации
От: Аноним  
Дата: 01.03.07 11:59
Оценка:
Господа профессионалы!

Можно ли при сериализации подключить xsd-схему?

Суть проблемы вот в чем:

1. Есть xsd-схема, например

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Mass">
<xs:complexType>
<xs:sequence>
<xs:element name="Gross">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:totalDigits value="12"/>
<xs:fractionDigits value="3"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Net">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:totalDigits value="7"/>
<xs:fractionDigits value="4"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Т.е. два элемента типа decimal, у которых установлен шаблон на кол-во знаков до и после запятой.

2. Генерю класс по схеме

public partial class Mass
{
private decimal grossField;
private decimal netField;

public decimal Gross
{
get { return this.grossField;}
set { this.grossField = value;}
}

public decimal Net
{
get { return this.netField;}
set { this.netField = value;}
}
}

3. Запускаю сериализацию:

public void Test()
{
Mass mass = new Mass();
mass.Gross = 100.1M;
mass.Net = 7.7M;

XmlSerializer serializer = new XmlSerializer(typeof(Mass));
TextWriter writer = new StreamWriter("res.xml");
serializer.Serialize(writer, mass);
writer.Close();
}

4. Получаю результат:

<Mass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Gross>100.1</Gross>
<Net>7.7</Net>
</Mass>

ПРОБЛЕМА: нужно, чтобы поля типа decimal соответствовали шаблону, заданному в xsd:
Т.е. результат НУЖЕН в таком виде (3 и 4 знака после запятой соответственно):

<Mass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Gross>100.100</Gross>
<Net>7.7000</Net>
</Mass>

Как бы это сделать?
Заранее спасибо!

P.S. Чего-то форматирование не работает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.