XML Deserialisieren funktioniert nur mit namespace in xml
Die am meisten einfache Weise bekomme ich ServiceStack xml-Deserialisierung zu arbeiten, wenn das xml enthält einen namespace. Allerdings, das xml, das ich erhalten nicht die namespaces enthalten. Die meisten einfachen arbeiten Beispiel:
[Serializable]
public class test
{
}
class Program
{
static void Main(string[] args)
{
string xml="<test xmlns=\"http://schemas.datacontract.org/2004/07/\"></test>";
var result = ServiceStack.Text.XmlSerializer.DeserializeFromString<test>(xml);
}
}
Aber das ist nicht das, was ich will. Ich möchte folgende Deserialisieren, da der xml die ich von mehreren Diensten:
string xml="<test></test>";
Aber das gibt mir die folgende Fehlermeldung:
DeserializeDataContract: Error converting type: Error in line 1 position 7.
Expecting element 'test' from namespace
'http://schemas.datacontract.org/2004/07/'..
Encountered 'Element' with name 'test', namespace ''.
Habe ich versucht:
[Serializable]
[XmlRoot("test", Namespace = "")]
public class test
Ich kann nicht erstellen Sie einen neuen Serializer, weil ServiceStack.Text.XmlSerializer ist statisch. Ich brauche zu wählen, die entweder für Microsoft XmlSerializer ODER ServiceStack (nicht beide). Bedeutung: wenn ich nicht dieses einfache Beispiel funktioniert, muss ich überspringen, sonst sehr nützlichen Teil des ServiceStack-Paket. Das Letzte, was ich will, ist Spritzen einige dummy-namespace in den eingehenden xml-Daten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
ServiceStack verwendet .NET Xml DataContractSerializer serialisieren von XML zum entfernen von Namespaces müssen Sie entweder den Namespace auf eine leere Zeichenfolge mit:
Aber dann werden Sie haben, um jede Eigenschaft, die Sie wollen, serialisiert Sie mit [DataMember] - Attribute. Eine bessere option ist, geben Sie eine leere namespace für alle Arten unter einem C# - namespace, der durch hinzufügen und Assembly-Attribut in Ihrem Montage.cs Datei, e.g:
Hinweis: Sie können entfernen Sie das Attribut [Serializable] - es ist nicht von jedem von ServiceStack ist serialisierungsprogramme. Auch alle XmlSerializer-Parametern, wie [XmlRoot] sind sinnlos, da ServiceStack verwendet .NET DataContractSerializer nicht Microsoft ' s früher XmlSerializer.