Я пытаюсь сериализовать объект в строку.
XML, из которого были взяты модели c #, имеет несколько пространств имен:
xmlns="http://www.example.org/standards/def/1"
xmlns:ac="http://www.example.org/Standards/xyz/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:rlc="http://www.example.org/standards/def/1"
xmlns:def1="http://www.lol.com/Standards/lol.xsd" Version="2013-06" xsi:schemaLocation="http://www.lol.org/standards/def/1 lol.xsd"
Я сериализую его с помощью:
var deserialize = (MyType)pageDeserializer.Deserialize(reader);
var namespaces = new XmlSerializerNamespaces();
namespaces.Add("ac", "urn:http://www.example.org/Standards/xyz/1");
namespaces.Add("rlc", "urn:http://www.example.org/standards/def/1");
namespaces.Add("def1", "http://www.lol.com/Standards/lol.xsd" Version="2013-06" xsi:schemaLocation="http://www.lol.org/standards/def/1 lol.xsd");
var str = pageDeserializer.SerializeAsUtf8<JvInsReinsurance>(deserialize, namespaces);
Где метод SerializeAsUtf8:
public static string SerializeAsUtf8<T>(this XmlSerializer serializer, T o, XmlSerializerNamespaces ns)
{
using (var textWriter = new Utf8StringWriter())
{
serializer.Serialize(textWriter, o, ns);
return textWriter.ToString();
}
}
Я ожидал, что мой XML будет выглядеть так:
<rlc:element1 attribute1="value">
<ac:element1>VALUR</ac:element1>
</rlc:element1>
Что я получу:
<element1 attribute1="value">
<element1>VALUR</element1>
</element1>
Но информация для пространства имен не включена, и это делает последующую проверку xsd неудачной.Как получить включенные префиксы пространства имен?
ОБНОВЛЕНИЕ 1
Удаление урны, как предлагается в комментариях, заставило меня пройти первый шаг.Теперь я получаю сообщение об ошибке при проверке XSD.
Я получаю следующие ошибки:
1.
The element 'ElementX' in namespace 'urn:http://www.example.org/standards/def/1' has invalid child element 'ElementY' in namespace 'http://www.example.org/standards/def/1'.
2.
The element 'ElementP' in namespace 'urn:http://www.example.org/standards/def/1' has invalid child element 'ElementQ' in namespace 'http://www.example.org/standards/def/1'.
Для 1. классов:
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.example.org/standards/def/1")]
public partial class ElementX
{
[XmlElement("ElementYName")]
public ElementY[] ElementYNames { get; set; }
}
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.example.org/standards/def/1")]
public partial class ElementY
{
[XmlAttribute]
public string Field1 { get; set; }
public ElementYFieldAmountType FieldAmount { get; set; }
public string Field2 { get; set; }
private string field3;
/// <remarks/>
public string Field3
{
get
{
return this.field3;
}
set
{
this.field3 = value;
}
}
}
[Serializable]
[DesignerCategory("code")]
[XmlType(AnonymousType = true, Namespace = "http://www.example.org/standards/def/1")]
public class ElementYFieldAmountType
{
public FieldAmount Amt { get; set; }
}
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.example.org/standards/def/1")]
public class FieldAmount
{
private string _ccyField;
private decimal valueField;
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string Ccy
{
get
{
return this._ccyField;
}
set
{
this._ccyField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public decimal Value
{
get
{
return this.valueField;
}
set
{
this.valueField = value;
}
}
}
С XSD
<xs:complexType name="ElementX">
<xs:sequence>
<xs:element ref="ElementY" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="ElementY" type="ElementYType"/>
<xs:element name="FieldAmount" type="AnyAmtType"/>
<xs:complexType name="ElementYType">
<xs:sequence>
<xs:element ref="Field2" minOccurs="0"/>
<xs:element ref="FieldAmount" minOccurs="0"/>
<xs:element ref="Field3" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Field1" type="xs:NMTOKEN" use="required"/>
</xs:complexType>
Для 2
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.example.org/standards/def/1")]
public partial class ElementP
{
public ElementQ ElementQName { get; set; }
}
[Serializable]
[DesignerCategory("code")]
[XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.example.org/standards/def/1")]
public class ElementQ
{
public PercentageRateType Rate { get; set; }
}
[Serializable]
[DesignerCategory("code")]
[XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.example.org/standards/def/1")]
public class PercentageRateType
{
[XmlAttribute]
public string RateUnit { get; set; }
[XmlText]
public decimal Value { get; set; }
}
Они выглядят хорошо для меня, что не так с этими