2012-11-08 10 views
8

मेरे पास एक ऐसी क्रिया है जो किसी विशेष वर्ग के किसी ऑब्जेक्ट के लिए जेसनआरसल्ट लौटाती है। मैंने शून्य वर्गों से बचने के लिए कुछ कक्षाओं के साथ इस वर्ग के गुणों को सजाया है। कक्षा परिभाषा है:एमवीसी 4 कार्रवाई बिना जेएसआरएसल्ट की वापसी

private class GanttEvent 
    { 
     public String name { get; set; } 

     [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] 
     public String desc { get; set; } 

     [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] 
     public List<GanttValue> values { get; set; } 
    } 

और मेरी लड़ाई में मैं एक वस्तु

var res = new List<GanttEvent>(); 

जो मैं का उपयोग कर लौटने का उपयोग करें:

return Json(res, JsonRequestBehavior.AllowGet); 

Unfortunatelly, मैं अभी भी उत्पादन में शून्य मान प्राप्त कर रहा हूँ:

[{"name":"1.1 PREVIOS AL INICIO ","desc":null,"values":null},{"name":"F04-PGA-S10","desc":"Acta preconstrucción","values":null},{"name":"F37-PGA-S10","desc":"Plan de inversión del anticipo","values":null},{"name":"F09-PGA-S10","desc":"Acta de vecindad","values":null},{"name":"F05-PGA-S10","desc":"Acta de inicio","values":null},{"name":"F01-PGA-S10","desc":"Desembolso de anticipo","values":null}] 

एम I कुछ याद आ रहा है या कुछ गलत कर रहा है?

उत्तर

6

जैसा कि ब्रैड क्रिस्टी ने कहा है, एमवीसी 4 अभी भी जावास्क्रिप्टसेरियलाइज़र का उपयोग करता है, ताकि आपकी ऑब्जेक्ट जेसननेट द्वारा क्रमबद्ध करने के लिए, आपको कई कदम उठाने होंगे।

सबसे पहले, इस प्रकार है (this solution के आधार पर) JsonResult से एक नया वर्ग JsonNetResult वारिस:

protected override JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior) 
{ 
    return new JsonNetResult(data, contentType, contentEncoding, behavior); 
} 
+0

पता नहीं है कि यह उत्तर अभी भी प्रासंगिक है, लेकिन मुझे ऐसा कुछ चाहिए, और आपके कोड का सी/पी किया। दुर्भाग्यवश, यह अपेक्षित के रूप में काम नहीं करता था, लेकिन मैंने आपके जेसननेट रीसेट क्लास को थोड़ा संपादित किया: var serializedObject = JsonConvert.SerializeObject (डेटा, स्वरूपण। कोई, नया जेसन सरलीलाइज़र सेटिंग्स {NullValueHandling = NullValueHandling.Ignore}); ... और अब यह पूरी तरह से काम करता है। धन्यवाद! – robertpaulsen

0

मेरा सुझाव यह देखना होगा कि क्या होता है यदि आप केवल एक गैंटटेवेंट ऑब्जेक्ट JSON पर क्रमबद्ध करते हैं। जेसन को अपनी कॉल भी जांचें उचित है।

1

Controller.JsonJavaScriptSerializerNewtonsoft Json library (जहां JsonPropertyAttribute से उत्पन्न होता है) का उपयोग करता है।

आपको या तो न्यूटॉन्सॉफ्ट लाइब्रेरी लाइब्रेरी का उपयोग करने की आवश्यकता होगी और इस तरह से क्रमबद्ध परिणाम लौटाएंगे, या आप Json पर कॉल करना जारी रखें और converter लिखें जो नल को अनदेखा कर देगा।

+0

:

public class JsonNetResult : JsonResult { public JsonNetResult() { this.ContentType = "application/json"; } public JsonNetResult(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior jsonRequestBehavior) { this.ContentEncoding = contentEncoding; this.ContentType = !string.IsNullOrWhiteSpace(contentType) ? contentType : "application/json"; this.Data = data; this.JsonRequestBehavior = jsonRequestBehavior; } public override void ExecuteResult(ControllerContext context) { if (context == null) throw new ArgumentNullException("context"); var response = context.HttpContext.Response; response.ContentType = !String.IsNullOrEmpty(ContentType) ? ContentType : "application/json"; if (ContentEncoding != null) response.ContentEncoding = ContentEncoding; if (Data == null) return; // If you need special handling, you can call another form of SerializeObject below var serializedObject = JsonConvert.SerializeObject(Data, Formatting.None); response.Write(serializedObject); } } 

फिर, अपने नियंत्रक में, नया वर्ग का उपयोग करने के Json विधि ओवरराइड धन्यवाद, मैं इसके बारे में संदिग्ध था, और आपने मेरी यद्यपि पुष्टि की। अंत में, जेसन.Net डिफ़ॉल्ट धारावाहिक है, लेकिन केवल ** वेबएपीआई ** के लिए, नियमित एमवीसी साइट के लिए नहीं। – Farlop

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