JSON

2012-08-26 17 views
6

मैं के माध्यम से एक प्रक्षेपण के उत्पादन कर रहा हूँ करने के लिए IQueryable सामान्य कन्वर्ट:JSON

var query = from book in books 
    select new 
    { 
     label = book.Title, 
     value = book.ID 
    }; 

मेरी उस्तरा पेज में मैं उपयोग करने की आवश्यकता:

var booksArray = [{ 
     @(json) 
    }]; 

ऐसी है कि जिसके परिणामस्वरूप सरणी लगता है:

label: 'c++', 
value: 'c++' 
}, { 
label: 'java', 
value: 'java' 
}, { 
label: 'php', 
value: 'php' 
}, { 
label: 'coldfusion', 
value: 'coldfusion' 
} 

मैं दो अलग-अलग दृष्टिकोणों से बहुत करीब आ गया हूं - मुझे एक स्ट्रिंग मिल सकती है जो सर्वर की तरफ सही दिखती है लेकिन डब्ल्यू मुर्गी पृष्ठ पर ही प्रदान की गई, सभी ' अंक ' बन गए।

लेकिन के माध्यम से JSON.net ...

सबसे अधिक संभावना दृष्टिकोण इस को प्राप्त करने पर ध्यान केंद्रित कर रहा है जैसे कि यह होना चाहिए:

var json = JsonConvert.ToString(query); 

लेकिन वह tosses:

Unsupported type: System.Linq.Enumerable+WhereSelectListIterator`2[Project.Entity.Book,<>f__AnonymousType3`2[System.String,System.Int32]]. Use the JsonSerializer class to get the object's JSON representation. 

क्या है सही JSON.net वाक्यविन्यास?

THX

उत्तर

10

आप .ToArray() का एक संयोजन और Html.Raw()

ToArray() जरूरत क्वेरी का मूल्यांकन करने और बनाने के JsonConvert खुश

var query = from book in books 
    select new 
    { 
     label = book.Title, 
     value = book.ID 
    }; 

var json = JsonConvert.SerializeObject(query.ToArray()); 

नोट: यदि आप JsonConvert.SerializeObject उपयोग करने के लिए यदि आप जटिल क्रमानुसार करने चाहते हैं की जरूरत है प्रकार के। JsonConvert.ToString bool, GUID, पूर्णांक, uri आदि

की तरह और अपने ध्यान में रखते हुए सरल प्रकार परिवर्तित करने के लिए प्रयोग किया जाता है Html.Raw नहीं एचटीएमएल एनकोड JSON करने के लिए:

var booksArray = @(Html.Raw(json)) 
+0

'var json' लाइन पर एक रनटाइम त्रुटि साधते । असमर्थित प्रकार: <> f__AnonymousType2'2 [System.String, System.String] []। मैंने दोनों तत्वों के लिए एक स्पष्ट 'ToString()' रूपांतरण किया है (आईडी वास्तव में एक पूर्णांक है) लेकिन रिपोर्ट की गई त्रुटि में कोई बदलाव नहीं है। प्रतिक्रिया के लिए mny thx – justSteve

+0

@justSteve धन्यवाद, आप सही हैं। मैंने अपना जवाब अपडेट कर लिया है। – nemesv

+0

ऐसा किया - अत्यधिक सराहना की। – justSteve