XML-Deserialisierung funktioniert nur mit Namespace in XML

8

Die einfachste Art, mit der ServiceStack xml deserialization funktioniert, ist, wenn das XML einen Namespace enthält. Das XML, das ich erhalte, enthält jedoch keine Namespaces. Das einfachste Arbeitsbeispiel:

%Vor%

Das will ich aber nicht. Ich möchte das folgende deserialize, weil das das XML ist, das ich von einigen Diensten bekomme:

%Vor%

Aber das gibt mir den folgenden Fehler:

%Vor%

Ich habe es versucht:

%Vor%

Ich kann keinen neuen Serializer erstellen, da ServiceStack.Text.XmlSerializer statisch ist. Ich muss für Microsoft XmlSerializer oder ServiceStack (nicht beides) wählen. Bedeutung: Wenn ich dieses einfache Beispiel nicht zum Laufen bringen kann, muss ich einen ansonsten sehr nützlichen Teil des ServiceStack-Pakets überspringen. Das Letzte, was ich möchte, ist, einen Dummy-Namespace in das eingehende XML einzufügen.

    
user1154148 13.03.2012, 18:14
quelle

1 Antwort

24

ServiceStack verwendet den Xml DataContractSerializer von .NET, um XML zu serialisieren, um Namespaces zu entfernen, die Sie benötigen, um den Namespace mit:

auf eine leere Zeichenfolge zu setzen %Vor%

Aber dann müssen Sie jede Eigenschaft, die Sie serialisieren möchten, mit [DataMember] -Attributen markieren. Eine bessere Option besteht darin, einen leeren Namespace für alle Typen in einem C # -Namespace anzugeben, indem Sie in der Datei Assembly.cs z. B .:

das Attribut Assembly hinzufügen %Vor%

Hinweis: Sie können das [Serializable] -Attribut entfernen - es wird von keinem der Serializer von ServiceStack verwendet. Außerdem sind alle XmlSerializer-Attribute wie [XmlRoot] nutzlos, da ServiceStack den DataContractSerializer von .NET und nicht den früheren XmlSerializer von Microsoft verwendet.

    
mythz 13.03.2012, 20:03
quelle