2013-05-30 31 views
7

Korzystamy z Web API z MVC 4, a nasze żądanie/odpowiedzi są wymagane w przypadku wielbłądów.ASP.NET Web API - XML ​​w camelcase

Zrobiliśmy to dla JSON z następującego kodu:

var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().Single(); 
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 

Ten sam kod niestety nie działa na XmlMediaTypeFormatter.

Jaki byłby najbardziej elegancki sposób na sformatowanie pliku XML w przypadku wielbłąda?

+3

Jeśli splatter odpowiednie XmlAttributes na swoich zajęciach i ich właściwościom XmlSerializer należy je szanować i serializacji XML, jak wolisz. Nie tak czysty i łatwy jak w Jsonie, ale może to być rozsądne rozwiązanie, niemniej jednak skorzystaj z tego linku, aby uzyskać więcej informacji http://msdn.microsoft.com/en-us/library/83y7df3e(v=vs.110).aspx – bUKaneer

+0

Sprawdź również tę odpowiedź jako przykład http://stackoverflow.com/a/22493313/1370442 – bUKaneer

+0

Zarówno XmlSeralizer, jak i XmlFormatter mają szeroki zakres problemów, które zdecydowanie nie zalecam ich używania i po prostu trzymam się Json serializujących obiektów, takich jak Json. narzędzia net lub ServiceStack. –

Odpowiedz

5

Rozwiązanie 1: Użycie XmlSerializer

Jeśli trzeba dopasować istniejący schemat XML należy użyć klasy XmlSerializer mieć większą kontrolę nad wynikowym pliku XML (w przypadku korzystania sprawę jak wielbłądzie.). Aby użyć XmlSerializer, musisz ustawić poniższą konfigurację w pliku global.asax lub konstruktorze swojej klasy kontrolera API.

var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter; 
xml.UseXmlSerializer = true; 

Po wprowadzeniu tej zmiany można dodać [DataContract] i [DataMember] dla podmiotów, które będą miały wpływ na wynik XML.

[DataContract(Name = "USER")] 
public class User 
{ 
    [DataMember(Name = "FIRSTNAME")] 
    public string FirstName;  

    [DataMember(Name = "LASTNAME")] 
    public string LastName; 
} 

Rozwiązanie 2: Tworzenie niestandardowej klasy Formatter XML

Należy rozwijać własną klasę Formatter mediów i ustawić go jako domyślny formatter.It XML zajmie dużo czasu i wysiłku niż rozwiązanie 1. Być w stanie utworzyć niestandardową klasę formatowania mediów zobacz poniższy link.

http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters

+0

To niewiarygodne, że nikt nie zrobił rozwiązania 2 open source :( Próbowałem w zeszłym roku, aby skopiować formater z Microsoft, ale miał zbyt wiele zależności. – Schiavini