Как избежать кодирования специальных символов в xmlroot

Я пытаюсь сериализовать класс JTDChanges с другим xmlrootname "ns1:BatchChanges", но после сериализации, когда я записываю его в файл, "ns1:BatchChanges" кодируется как "ns1_x003A_BatchChanges".

это мой класс

[ Serializable, XmlRoot("ns1:BatchChanges") ]
    public class JTDChanges
    {
        [XmlElement("OrgUnitChanges")]
        public List<OrgUnitStage> CustomerChanges = new List<OrgUnitStage>();
    } 

Может ли кто-нибудь предложить, как я могу избежать кодирования?


person Sri Harsha    schedule 20.10.2015    source источник


Ответы (1)


Я полагаю, что вы ищете Функции пространства имен XML

[Serializable, XmlRoot("BatchChanges, Namespace = "http://www.w3.org/XML/2008/xsdl-exx/ns1") ]
public class JTDChanges
{
    [XmlElement("OrgUnitChanges")]
    public List<OrgUnitStage> CustomerChanges = new List<OrgUnitStage>();
} 

Теперь, прежде чем это действительно повлияет, вам также нужно указать вашему сериализатору использовать это пространство имен.

// Create a name space prefix
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("ns1", "ttp://www.w3.org/XML/2008/xsdl-exx/ns1");

// Create a serializer
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(this.GetType());

// And pass the namespace along as param
ser.Serialize(writer, this, ns)

Что касается теста, вы можете объявить следующее

 [XmlElement(ElementName = "point", Namespace = "http://www.w3.org/XML/2008/xsdl-exx/ns1")]

что приведет к <ns1:point>(whatever the values were you declared it upon)</ns1:point>

person MX D    schedule 20.10.2015
comment
Спасибо, это сработало. Но он также связывает все мои узлы xml из OrgUnitChanges в ns1:OrgUnitChanges. Я хочу, чтобы ns1 добавлялся только к корневому узлу. - person Sri Harsha; 20.10.2015
comment
@SriHarsha Здесь на SO много сообщений которые объясняют вам, как это сделать. Если этот ответ помог, не забудьте принять его как ответ / проголосовать за него, чтобы другие люди увидели - person MX D; 20.10.2015