2013-01-22 34 views
5

में ऐरे नाम जोड़ें मैं वेब एपीआई से जेसन आउटपुट बदलने की कोशिश कर रहा हूं। मैं लोगों की तरह एक ऑब्जेक्ट कहते हैं, वर्तमान उत्पादन होना चाहते हैं:एएसपीनेट वेब एपीआई - आउटपुट

{"people":[{name:"John", sex:"M"},{name:"Simon", sex:"M"}]} 

यह कैसे किया जा सकता है पर कोई विचार:

[{name:"John", sex:"M"},{name:"Simon", sex:"M"}] 

हालांकि मैं उत्पादन की तरह बनना चाहते हैं?

उत्तर

14

विकल्प 1 - बनाएं नया मॉडल

के बजाय लौटने

public IEnumerable<Person> Get() 

वापसी

public People Get() 

जहां

public class People { 
    public IEnumerable<Person> People {get; set;} 
} 

विकल्प 2 - वापसी गतिशील

इसके बजाय

public IEnumerable<Person> Get() 

लौटने वापसी

public dynamic Get() { 
    IEnumerable<Person> p = //initialize to something; 
    return new {people = p}; 
} 

विकल्प 3 की - संशोधित JsonMediaTypeFormatter

तुम अब भी लौट सकते हैं

public IEnumerable<Person> Get() 

लेकिन निम्न वर्ग जोड़ें:

public class PeopleAwareJsonMediaTypeFormatter : JsonMediaTypeFormatter 
{ 
    public override System.Threading.Tasks.Task WriteToStreamAsync(Type type, object value, System.IO.Stream writeStream, HttpContent content, TransportContext transportContext) 
    { 
     if ((typeof (IEnumerable<People>).IsAssignableFrom(type))) 
     { 
      value = new {people = value}; 
     } 
     return base.WriteToStreamAsync(type, value, writeStream, content, transportContext); 
    } 
} 

अब में WebApiConfig सिर्फ नए फ़ॉर्मेटर रजिस्टर वर्ष JSON एक के बजाय:

config.Formatters.RemoveAt(0); 
config.Formatters.Insert(0, new PeopleAwareMediaTypeFormatter()); 
0

आप इस JSON के लिए एक DTO होने किया जाना चाहिए। तो, आपको बस इतना करना है कि आपके सरणी के लिए एक कंटेनर है।

public class ReturnedJson 
{ 
    public IList<People> People {get;set;} 
} 

public class People 
{ 
    public string name {get;set;} 
    public string sex{get;set;} 
} 

यह है कि आप, इस json के लिए एक डीटीओ है क्योंकि आप किसी भी कोड नहीं पता चला है मेरी धारणा है।

0

फ़िलिप डब्ल्यू का दूसरा विकल्प पर बिल्डिंग, यह अच्छी तरह से डेटाबेस से खींचती सूची IEnumerable लागू करता है के बाद से:

सार्वजनिक गतिशील प्राप्त करें() {

List<Person> personList = new List<Person>(); 

using (DataTable dt = db.ExecuteDataTable("PeopleSelect")) { 
    foreach (DataRow dr in dt.Rows) { 
     personList.Add(new Person { name = (string)dr["name"], ...}); 
    } 
} 

return new { people = personList }; 

}

2

चलें चर मान सूची वस्तु का नाम PersonList है जो

देता है
[{name:"John", sex:"M"},{name:"Simon", sex:"M"}] 

आप बस दर्द

 return new 
     { 
      people = PersonList 
     }; 

तो बिना निम्नलिखित के रूप में लौट कर सकते हैं आप होगा

{"people":[{name:"John", sex:"M"},{name:"Simon", sex:"M"}]}