2010-02-05 12 views
5

मेरे नियंत्रक इसMVC बाध्यकारी

return Json(customer); 

की तरह देखने के लिए एक वस्तु ग्राफ लौटा रहा है json प्रारूप में दृश्य मेरी json वस्तु इस

{ 
    Name: 'Joe', 
    Budget: { Amount: 500, Spend: 100 } 
} 

की तरह दिखता है पर के लिए एक जटिल json वस्तु सपाट कौन सा नक्शे को सही ढंग से अपने ग्राहक वस्तु के लिए:

public class Customer 
{ 
    public string Name {get;set;} 
    public Budget Budget{get;set;} 
} 

public class Budget 
{ 
    public decimal Amount{get;set;}  
    public decimal Spend{get;set;} 
} 

मुझे लगता है कि एक ही json वस्तु anoth वापस करने के लिए पास करना चाहते हैं

public ActionResult Method(Customer customer) 

जब मैं इस ग्राहक के नाम पॉपुलेटेड हो लेकिन बजट वर्ग है, जो मुझे समझ में क्यों यह उम्मीद कर रहा है, क्योंकि modelbinder है नहीं है:: {नाम: 'जो', 'बजट इस हस्ताक्षर के साथ नियंत्रक पर एर विधि .माउंट ': 500,' बजट। सैंड ': 100}

इसलिए मुझे विकल्प हैं: 1. मैं जेसन ऑब्जेक्ट को प्रारूप में वापस कर सकता हूं, लेकिन मुझे नहीं पता कि आप कैसे कर सकते हैं क्योंकि आप' टी ऐसा करते हैं:

return Json(new { Budget.Amount= 500}) 
  1. मैं क्लाइंट पक्ष पर जेसन ऑब्जेक्ट को फ़्लैट कर सकता हूं। क्या ऐसा करने के लिए प्लगइन्स या तरीके हैं?
+0

लेकिन आप यह कर सकते हैं, है ना? सुनिश्चित नहीं है कि यह आपकी पूरी समस्या हल करता है: वापसी जेसन (नया {बजट = नया {राशि = 500}}) – RationalGeek

+0

मैं जेसन ऑब्जेक्ट को फ़्लैट करने की कोशिश कर रहा हूं ताकि परिणाम '{' बजट। राशि '= 500}' – adriaanp

उत्तर

5

यहाँ एक समारोह है कि एक फ्लैट हैश

function flatten(json){ 
    var nj = {}, 
     walk = function(j){ 
      var jp; 
      for(var prop in j){ 
       jp = j[prop]; 
       if(jp.toString() === "[object Object]"){ 
        walk(jp); 
       }else{ 
        nj[prop] = jp; 
       } 
      } 
     }; 
    walk(json); 
    return nj; 
} 
+0

अरे नहीं ... आप जेसन को हैश में फटकारना चाहते हैं? – Mic

+1

हाँ, क्या इसमें कुछ गड़बड़ है? बुरा अभ्यास? – adriaanp

+0

आपका समाधान काम करेगा, लेकिन मुझे संपत्ति नाम के रूप में 'बजट। राशि' रखना होगा, मैं वर्तमान में 'चलने' फ़ंक्शन – adriaanp

0

को कोई चीज परिवर्तित मेरे मामले में हम कार्रवाई url करने के लिए अतिरिक्त वस्तु पारित करके इसे हल किया है।

public ActionResult विधि (ग्राहक ग्राहक, [बाइंड (उपसर्ग = "बजट")] बजट बजट)

ऐसा आप json डेटा समतल करने के लिए है निम्नलिखित तरीके से (इससे पहले कि आप इसे भेजा नियंत्रक) बनाने के लिए :

How to pass complex type using json to ASP.NET MVC controller

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