2016-04-01 6 views
0

Çözümümde bir DTO ve bir Etki Alanı projesi ve veri oluşturmak için web api ile bir MVC ön ucu var.MVC Web API XmlSerializerFormat yok sayar ve bunun yerine DataContractSerliazer kullanır

Web api denetleyicisini kurdum ve işlem, DTO nesnesini DataService'den geri alıyor. Ancak hepsi harika, ancak xml'nin döndürülmesini istiyorum ve bazı değerlerin xml özelliklerinde olmasını istiyorum. aşağıdaki gibi

<root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<lookups> 
<lookup category="General" field="Alert Type" value="Lack of Transparency" entityid="2273"/> 
<lookup category="General" field="Alert Type" value="Unfair Terms " entityid="2274"/> 
<lookup category="General" field="Alert Type" value="Operator Concerns" entityid="2275"/> 
... 
</lookups> 
<paymentmethods /> 
<affiliates /> 
</root> 

Arama sınıftır:

[Serializable] 
[XmlSerializerFormat] 
public class Lookup 
{ 
    [XmlAttribute("category")] 
    public String Category { get; set; } 

    [XmlAttribute("field")] 
    public String Field { get; set; } 

    [XmlAttribute("value")] 
    public String Value { get; set; } 

    [XmlAttribute("entityid")] 
    public String EntityId { get; set; } 

    public Lookup(String Category, String Field, String Value, int? EntityId = null) 
    { 
     this.Category = Category; 
     this.Field = Field; 
     this.Value = Value; 
     this.EntityId = (EntityId != null ? EntityId.ToString() : null); 
    } 

    public Lookup() { } 
} 

başlangıçta benim ViewModels ile benim DTO nesneleri (örneğin Arama, PAYMENTMETHOD ve Bağlı) vardı, ama benim DTO proje içine taşındı. Ben DTO projesi Hy ViewModels klasöründen hareketli nesneleri Önce benim global.asax

içinde UseXmlSerializer = true belirledik

, çalışıyor ve ben arzu XML başlamıştı. Hareket ettikten sonra, XmlSerializerFormat göz ardı ediliyor ve DataContractSerliazer kullanıyor.

Yani DataMember özellikleri kullanılarak, ben xml biçimlendirmek, ancak belli ki xml o [XmlSerializerFormat] ve [XmlAttribute görmezlikten geldiği görülmekte neden

Herhangi düşünceler bağlıyor gibi bazı özellikler Serileştirilecek ayarlayamıyor ("alan")] öznitelikleri?

ben gibi birkaç SO mesajları okudum: üzerinde çalışmak için Global.asax xml Serializer Ayar http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#xml_pertype

: XmlSerializer ignores [XmlAttribute] in WebApi ve
How can you control .NET DataContract serialization so it uses XML attributes instead of elements?

+0

burada çözüm bulundu üretilen XML kök düğümünü oluşturur: http://www.asp.net/web- api/genel bakış/formatlar-ve-model-ciltleme/json-ve-xml-serileştirme # xml_pertype xml Serializer'ı belirli bir tür üzerinde çalışacak şekilde ayarlamaya çalıştım –

cevap

0

burada buna çözüm buldu benim için çalıştı belirli türü:

var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter; 
xml.UseXmlSerializer = true; 
xml.SetSerializer<FullResponseRoot>(new XmlSerializer(typeof(FullResponseRoot))); 

FullResponseRoot n I (yukarıda belirtilen sınıfların FullResponseRoot özellikleri olan) seri üretimi am nesnenin ame FullResponseRoot

+0

Neredeyse bir yıl sonra aynı sorunu yaşadım kendi çözümüm! Ders: Çalışsa da, bu en iyi çözüm değildir. Global.asax içinde serileştirilecek nesneyi açıkça yapılandırmak aslında bir çözümdür. Global.asax 'a bakarken gözden kaçırmak çok kolaydı. Daha zarif yapılandırılabilir bir çözüm olmalı. –

İlgili konular