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.
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.
Tags und Links c# namespaces servicestack xmlserializer