2012-10-24 10 views
11

मुझे मानक एमवीसी 4 वेबएपीआई परियोजना से निम्नलिखित प्रतिक्रिया मिल रही है;निकालें <ArrayOf। एमवीसी वेब एपीआई प्रतिक्रिया से

<ArrayOfProduct xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<Product> 
<Id>1</Id> 
<Name>Tomato Soup</Name> 
<Category>Groceries</Category> 
<Price>1</Price> 
</Product> 
</ArrayOfProduct> 

मैं इतना है कि यह रिटर्न

<Products> 
<Product> 
<Id>1</Id> 
<Name>Tomato Soup</Name> 
<Category>Groceries</Category> 
<Price>1</Price> 
</Product> 
</Products> 

मैं विभिन्न तरीकों के लिए कई संदर्भ है कि माना जाता है कि इस, कोई भी काम का समाधान मिल गया है इसे बनाने के लिए कोशिश कर रहा हूँ;

डिफ़ॉल्ट धारावाहिक बदलना काम नहीं करता है।

Product के लिए ग्राहक serializer बनाना काम नहीं करता है।

एक नई कक्षा बनाना जिसमें List<Product> उपयुक्त XmlRoot और XmlElement विशेषताएँ के साथ खुलासा नहीं है।

Datacontract विशेषताएँ जोड़ना काम नहीं करता है।

CollectionDatacontract विशेषताएँ जोड़ना काम नहीं करता है।

यह मुझे छोड़कर हर किसी के लिए इतना आसान प्रतीत होता है!

+0

आप सेटिंग [इस अतः सवाल-जवाब में दिखाया गया है] (उपयोग करने की कोशिश है http : //stackoverflow.com/questions/12263345/asp-net-web-api-xml-serialization-arrayof)। साथ ही, क्या आप वेब एपीआई के रिलीज संस्करण का उपयोग कर रहे हैं? –

+0

हां, कोशिश की और हाँ, यह रिलीज संस्करण है। – ChrisBint

उत्तर

14

बजाय XmlSeriazlier उपयोग करके देखें:

config.Formatters.XmlFormatter.UseXmlSerializer = true; 

और फिर एक वर्ग है कि उत्पाद के संग्रह से निकला है परिभाषित करने की कोशिश, और 'ArrayOfProduct' से तत्व नाम का नाम बदलने का उपयोग करें [XmlRoot ("उत्पाद")] 'उत्पाद' के लिए।

उदाहरण के लिए

, बजाय सूची का उपयोग कर के, वर्ग उत्पाद का उपयोग करें:

[XmlRoot("Products")] 
public class Products : List<Product> { } 

public class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Category { get; set; } 
    public double Price { get; set; } 
} 

ApiController की कार्रवाई:

public Products Get() 
    { 
     return new Products() 
     { 
      new Product() 
      { 
       Id = 1, 
       Name = "Tomato Soup", 
       Category = "Groceries", 
       Price = 1 
      } 
     }; 
    } 
+0

हाय। क्या आपने ऐसा करने का कोई तरीका है लेकिन 'उत्पाद' एक्सएमएल तत्व को किसी और चीज़ में भी बदल दिया है? मुझे नाम बदलने के लिए वर्ग पर सही विशेषता सेट करने का कोई तरीका नहीं मिल रहा है ... – Tallmaris

+0

2 टाल्मारिस: किसी वर्ग या/और गुणों को सजाने के लिए [DataContract] विशेषता का उपयोग करें – Romko

+0

आपके कोड में 'config' क्या है? क्या आपका मतलब है 'GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true; '? –

संबंधित मुद्दे