Biorąc pod uwagę następujący fragment kodu:XmlSerializer w .NET z XmlSchemaForm.Unqualified
using System;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace XmlSerializationTest
{
[XmlType(Namespace = "http://www.test.com")]
public class Element
{
[XmlElement]
public int X;
}
[XmlRoot(Namespace = "http://www.test.com")]
public class Root
{
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public Element Element;
}
public static class Program
{
public static void Main(string[] args)
{
var root = new Root { Element = new Element { X = 1 } };
var xmlSerializer = new XmlSerializer(typeof(Root));
xmlSerializer.Serialize(Console.Out, root);
}
}
}
wyjście jest:
<?xml version="1.0" encoding="ibm852"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.test.com">
<Element xmlns="">
<X xmlns="http://www.test.com">1</X>
</Element>
</Root>
Pytanie dlaczego ustawienie właściwości Form do XmlSchemaForm.Unqualified
przyczyną tej Element
Przestrzeń nazw elementu jest ustawiona na ""
, nawet jeśli ma atrybut XmlTypeAttribute
z tą samą przestrzenią nazw co element główny?
Ten rodzaj kodu (część XmlSchemaForm.Unqualified
) jest generowany przez narzędzie WSCF.blue
i komplikuje on przestrzeń nazw.
„bez zastrzeżeń” wskazuje, że atrybuty od docelowej przestrzeni nazw nie muszą być kwalifikowane z przedrostka przestrzeni nazw. Dlatego właśnie dostajesz xmlns = "", jeśli jest ustawione na kwalifikowane, wszystko w porządku. Jak już powiedziałeś, z automatycznego narzędzia. Sprawdź, czy w narzędziu znajdują się konfigurowalne opcje. – Aravind
@Aravind: Myślę, że bez kwalifikacji oznacza, że serializator nie jest zmuszony do używania prefiksu (może, ale nie musi). Ale nie widzę powodu, aby ZMIENIŁ bazę nazw elementu elementu (z "http://www.test.com" na "")! Niestety, WSCF.blue nie wydaje się mieć odpowiedniego przełącznika do naprawy. – Stefan