Najprostszym sposobem deserializacji xml ServiceStack jest praca, gdy xml zawiera przestrzeń nazw. Jednak otrzymany xml nie zawiera przestrzeni nazw. Najprostszy działający przykład:Odwzorowywanie XML działa tylko z przestrzenią nazw w xml
[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);
}
}
Jednak nie tego chcę. Chcę dodaje deserializacji, ponieważ jest to xml uzyskać z kilku usług:
string xml="<test></test>";
Ale to daje mi następujący błąd:
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 ''.
ja próbowałem:
[Serializable]
[XmlRoot("test", Namespace = "")]
public class test
Nie mogę utworzyć nowego Serializera, ponieważ ServiceStack.Text.XmlSerializer jest statyczny. Muszę wybrać dla Microsoft XmlSerializer OR ServiceStack (nie oba). Znaczenie: jeśli nie mogę uzyskać tego prostego przykładu do pracy, muszę pominąć bardzo użyteczną część pakietu ServiceStack. Ostatnią rzeczą, której chcę, jest wstrzyknięcie jakiejś obojętnej przestrzeni nazw w przychodzącym xml.
Dzięki! To było brakujące ogniwo, którego potrzebowałem! Jakoś nie mogę znaleźć odpowiedniej dokumentacji dla ServiceStack ... – user1154148
Jakikolwiek powód, dla którego nie napisałeś własnego deserializera XML? Microsoft wydaje się potrzebować właśnie tego typu magicznej konfiguracji sosu, aby działał, w przeciwieństwie do serializatora/deserializera JSON, który po prostu działa. – JasonD
@JasonD Tak, nie lubię NIH'ing bez dobrego powodu i wolę nie używać XML. MSS XML DCS jest również dość wydajny dla XML, nie ma wiele korzyści dla wysiłku, który by wymagał. – mythz