2016-04-28 6 views
8

के माध्यम से ऑब्जेक्टिव-सी पर वापस लौटने के लिए मेरे पास ASP.NET के माध्यम से SQL डेटाबेस से डेटा प्राप्त करने और फिर ऑब्जेक्टिव-सी पर डेटा पास करने के बारे में कोई प्रश्न है। वर्तमान में मैं सिर्फ एक एसक्यूएल का चयन करें बयान का उपयोग कर रहा ASP.NET के माध्यम से डेटाबेस से डेटा प्राप्त करने के लिए और ASP.NET तो जैसे डेटा रिटर्न:एसक्यूएल एक्सएमएल या जेएसओएन एएसपी.NET

<ArrayOfKeyValueOfstringPunchListCellModel84zsBx89 xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
<KeyValueOfstringPunchListCellModel84zsBx89> 
<Key>ORC0023</Key> 
<Value xmlns:d3p1="http://schemas.datacontract.org/2004/07/LHS.Models"> 
</Value> 
</KeyValueOfstringPunchListCellModel84zsBx89> 
</ArrayOfKeyValueOfstringPunchListCellModel84zsBx89> 

और फिर ऑब्जेक्टिव-सी में मैं एक NSDictionary में डेटा डाल रहा हूँ इस तरह:

NSDictionary *punchList = [[NSDictionary alloc]initWithDictionary:[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&myError]]; 

सब कुछ यहां अपेक्षित काम कर रहा है।

क्या मैं अब कर रहा हूँ एक संग्रहीत प्रक्रिया है कि एक्सएमएल रिटर्न और ASP.NET एक्सएमएल वापसी (यहाँ सब कुछ पूरा किया और अपेक्षा के अनुरूप काम कर रहा है) है पैदा कर रही है एक्सएमएल इसलिए की तरह बाहर आ गया:

<KeyValueOfstringPunchListCellModel84zsBx89> 
<Key>ORC0023</Key> 
<Value> 
</Value> 
</KeyValueOfstringPunchListCellModel84zsBx89> 
</ArrayOfKeyValueOfstringPunchListCellModel84zsBx89> 

अब आपके लिए उद्देश्य-सी प्रशंसकों, आप जानते हैं कि आपके पास NSDictionary में XML नहीं हो सकता है जब तक कि आप किसी तृतीय पक्ष आइटम/लाइब्रेरी का उपयोग न करें।

अब मेरा सवाल है कि मैंने जेएसओएन वापस करने के लिए मेरी संग्रहीत प्रक्रिया को दोबारा शुरू कर दिया है या इस बारे में जाने के लिए यह एक और तरीका है?

मेरा अंतिम लक्ष्य प्रक्रिया जितनी जल्दी हो सके प्रक्रिया कर रहा है और एसक्यूएल क्वेरी बहुत बड़ी है और पंक्तियों का बहुत कुछ देता है।

+1

आप वास्तव में यह नहीं समझते कि आपकी समस्या क्या है। एक्सएमएल और जेएसओएन के बीच एक आकार तुलना? क्या आपके पास HTTP प्रतिक्रियाओं पर संपीड़न सक्षम है? – Wain

+0

आपको XML या JSON मैन्युअल रूप से तैयार करने की आवश्यकता क्यों है? एएसपी.Net एपीआई के पास – techspider

उत्तर

2

आपको

1) अपनी संग्रहित प्रो को फिर से करें और कच्चे डेटा को वापस करें।

2) एएसपीनेट डेटा स्वरूपण को संभालता है, क्योंकि कुछ क्लाइंट JSON चाहते हैं जबकि अन्य xml पसंद करेंगे। ताकि आप JSON मार्ग जा रहे हैं, तो आप MVC नियंत्रक यानी

public JsonResult GetData() 
     { 
      var temp = new { 
       name = "hello world" 
      }; 
      return this.Json(temp) 
     } 

से JSON परिणाम वापसी या वेब एपीआई का उपयोग कर एक वेब सेवा बना सकते हैं।

के बाद से आप एक बड़े परिणाम सेट है, तो आप कम संसाधनों

खा जाएगा JSON जो एक्सएमएल से कम वर्बोज़ है उपयोग करने का प्रयास है और इस तरह करना चाहिए
+0

को परिभाषित करने के तरीके में प्रतिक्रिया लौटने की प्रक्रिया को स्वचालित करने के तरीके हैं, यह निश्चित रूप से जाने का तरीका है ... यदि यह एएसपीनेट का कुछ मूलभूत संस्करण नहीं है। – Clay

0

मैं कोई वैकल्पिक समाधान प्रदान करना चाहते हैं, लेकिन मैं कुछ लोगों द्वारा जाना है मान्यताओं।

अब मेरे सवाल मैं अपने संग्रहीत प्रक्रिया फिर से करना JSON या इस वहाँ एक और तरीका है इस बारे में जाने के लिए वापस जाने के लिए है है?

आप JSON वापस जाने के लिए अगर आपको लगता है कि अतिरिक्त कदम जब तक आप Microsoft SQL सर्वर 2016 जो अब बॉक्स से बाहर "FOR JSON" खंड का समर्थन करता है चल रहे हैं बच सकते हैं नहीं है।

मेरे अंतिम लक्ष्य प्रक्रिया के रूप में तेजी से संभव के रूप में बनाने और SQL क्वेरी विशाल और रिटर्न पंक्तियों की बहुत है।

यहां "विशाल" + "तेज़" भूमिका निभा सकता है। किसी भी मामले में, आप ऑब्जेक्टिव-सी से एक्सएमएल दाएं को भी पार्स कर सकते हैं जिस तरह से सी # प्रशंसक लड़के इसे भी करते हैं, ala XmlReader

निश्चित रूप से पतली रैपर, IGXMLReader की तरह कर रहे हैं।और यहां आपके एक्सएमएल के खिलाफ एक प्रारंभिक उदाहरण है।

- (NSDictionary *)retrieveDataFromXml:(NSString *)xml { 
    NSMutableDictionary *dictionary = 
     [[NSMutableDictionary alloc] initWithCapacity:200]; 
    NSString *key; 
    for (IGXMLReader *node in [[IGXMLReader alloc] initWithXMLString:xml]) { 
    if ([node type] == IGXMLReaderNodeTypeElement && 
     [[node name] hasPrefix:@"Key"]) { 
     key = [node text]; 
    } else if ([node type] == IGXMLReaderNodeTypeElement && 
       [[node name] hasPrefix:@"Value"] && [key length]) { 
     [dictionary setObject:[node text] forKey:key]; 
     key = nil; 
    } 
    } 
    return [dictionary copy]; 
} 

मैंने अवधारणा को चित्रित करने के लिए github में एक उदाहरण दिया।

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