2012-02-21 8 views
6

मैं नए asp.net वेब एपीआई परीक्षण करने के लिए एक मानक MVC कार्रवाई से API पद्धति चले गए और अचानक एक रीड ओनली संपत्ति नहीं रह गया है धारावाहिक है (दोनों लौटने JSON) serializing नहीं। क्या यह अपेक्षित व्यवहार है?ASP.NET वेब-एपीआई केवल पढ़ने के लिए संपत्ति

संपादित करें: जोड़ा गया कोड नमूना

मैं दोनों Newtonsoft.Json 4.0.8 और System.Json 4.0 nuget संकुल के माध्यम से संदर्भित

 public IQueryable<Car> Gets() 
     { 
      return _carRepository.GetCars(); 
     } 

     public class Car 
     { 
      public IEnumerable<Photo> Photos 
      { 
       get { return _photos; } 
      } 

      public string PreviewImageUrl // No longer serialized 
      { 
       get 
       { 
        var mainImage = Photos.FirstOrDefault(o => o.IsMainPreview) Photos.FirstOrDefault(); 
         return mainImage != null ? mainImage.Url : (string.Empty); 
        } 
       } 
      } 
     } 
+0

की उम्मीद नहीं। क्या आप कुछ कोड पोस्ट कर सकते हैं जो इस मुद्दे को दोहराता है। – marcind

+0

कौन सा JSON serializer प्रयोग कर रहे हैं? –

उत्तर

10

JsonMediaTypeFormatter कि बीटा के साथ जहाज एक धारावाहिक का उपयोग करता है जो केवल-पढ़ने योग्य गुणों का समर्थन नहीं करता है (क्योंकि वे सही ढंग से गोल नहीं करेंगे)। हम अगले वास्तविकताओं के लिए इसे संबोधित करने की योजना बना रहे हैं।

औसत समय में आप एक कस्टम JSON MediaTypeFormatter कार्यान्वयन का उपयोग कर सकते हैं जो अंतर्निहित फ़ॉर्मेटर के बजाय जेसन.NET (एक उपलब्ध here) का उपयोग करता है।

अद्यतन: इसके अलावा एक JSON.NET फ़ॉर्मेटर hooking के बारे में हेनरिक के ब्लॉग की जाँच: http://blogs.msdn.com/b/henrikn/archive/2012/02/18/using-json-net-with-asp-net-web-api.aspx

+1

बस आर सी रिलीज करने के लिए उन्नत और यह अभी भी एक मुद्दा प्रतीत होता है। बस उत्सुक अगर चीजें अंतिम रिलीज से पहले बदल जाएगा या हम सिर्फ उम्मीद नहीं करनी चाहिए केवल पढ़ने के लिए गुण धारावाहिक जा करने के लिए? धन्यवाद! –

+0

आप नवीनतम रात के निर्माण का प्रयास कर सकते हैं (निर्देश: http://aspnetwebstack.codeplex.com/discussions/353867)। साथ ही, सुनिश्चित करें कि आपने वास्तव में अपने सिस्टम से बीटा बिट्स को अनइंस्टॉल किया है। यदि यह अभी भी एक मुद्दा है तो आप यहां एक रेपो पोस्ट कर सकते हैं: http://aspnetwebstack.codeplex.com/। धन्यवाद। – marcind

+0

मैंने बीटा को अनइंस्टॉल किया था और आरसी स्थापित किया था, लेकिन मेरे प्रोजेक्ट के पैकेज को न्यूजेट के साथ अपडेट करने के लिए उपेक्षित किया गया था, इसलिए मैं अभी भी बीटा बिट्स का उपयोग कर रहा था। अद्यतन करने के बाद, केवल पढ़ने योग्य संपत्ति JSON का उपयोग करके क्रमबद्ध है, लेकिन एक्सएमएल के रूप में नहीं। मेरे उद्देश्यों के लिए, JSON मुझे बस इतना चाहिए, इसलिए मैं अच्छा हूं, लेकिन ऐसा लगता है कि इसे एक्सएमएल क्रमबद्धता के साथ व्यवहार करना चाहिए? –

4

अगर यह एक अपेक्षित व्यवहार है मैं नहीं जानता या नहीं। मैं कहूंगा कि यह इनपुट पैरामीटर के लिए अपेक्षित है (क्योंकि आप उनके मान सेट नहीं कर सकते हैं) लेकिन आउटपुट पैरामीटर के लिए नहीं। तो मैं कहूंगा कि यह आउटपुट पैरामीटर के लिए एक बग है।

मॉडल::

public class Product 
{ 
    public Product() 
    { 
     Prop1 = "prop1 value"; 
     Prop2 = "prop2 value"; 
     Prop3 = "prop3 value"; 
    } 

    public string Prop1 { get; set; } 

    [ReadOnly(true)] 
    public string Prop2 { get; set; } 

    public string Prop3 { get; protected set; } 
} 

नियंत्रक:

public class ProductsController : ApiController 
{ 
    public Product Get(int id) 
    { 
     return new Product(); 
    } 
} 

अनुरोध:

api/products/5 

परिणाम:

{"Prop1":"prop1 value","Prop2":"prop2 value"} 
0 और यहाँ एक उदाहरण मुद्दे को दर्शाता हुआ है

तो संपत्ति एक सार्वजनिक सेटर यह धारावाहिक नहीं है जो सामान्य प्रतीत नहीं होता है के रूप में Product वर्ग इस मामले में आउटपुट के रूप में प्रयोग किया जाता है नहीं है, तो।

मैं एक कनेक्ट टिकट खोलने ताकि माइक्रोसॉफ्ट रिलीज होने से पहले इसे ठीक कर सकते या कम से कम बताया है कि इस डिजाइन के द्वारा होता है सुझाव है।