2016-04-28 5 views
8

ASP.NETを介してSQLデータベースからデータを取得し、Objective-Cにデータを渡すことに関して質問があります。現在、私はASP.NETおよびASP.NETを介してデータベースからデータを取得するために、SQLのSELECT文を使用していますと、そのようなデータを返します。ASP.NETを介してObjective-Cに戻るSQL XMLまたはJSON

<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> 

そしてObjective-Cで私はNSDictionaryの内のデータを入れていますそうですね:

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

すべてが期待通りに動作しています。

XMLはそうのように出てきた私はXMLを返し、ASP.NETは、(ここではすべてが完了し、正常に機能している)XMLを返す必要があり、ストアドプロシージャを作成して、今やっている:今

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

Objective-Cファンにとっては、サードパーティのアイテム/ライブラリを使用しない限り、NSDictionaryでXMLを使用することはできません。

ここで私の質問は、JSONを返すために私のストアドプロシージャをやり直すか、これについて別の方法がありますか?

私の最終目標は、プロセスをできるだけ速くし、SQLクエリが膨大であり、多くの行を返すことです。

+1

あなたの問題が本当に説明されていません。 XMLとJSONのサイズ比較ですか? HTTPレスポンスで圧縮を有効にしていますか? – Wain

+0

なぜ手動でXMLまたはJSONを準備する必要がありますか? ASP.Net APIは、定義した方法で応答を返すプロセスを自動化する方法を持っています – techspider

答えて

2

1)保存したprocをやり直して、生データを返します。

2)一部のクライアントではJSONが必要な場合があり、他のクライアントではXMLが好まれる場合があるため、asp.netでデータフォーマットを処理します。あなたはJSONルートをつもりならそう、あなたはMVCコントローラすなわち

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

またはWeb APIを使用してWebサービスを作成してからJSON結果を返すことができます。

あなたが大きな結果セットを持っているので、あなたは

+0

これは確かに行く方法です... asp.netのいくつかのbasackwardバージョンではない場合。 – Clay

0

をXMLよりも少ない冗長であるJSONを使用してみてください、したがって、より少ないリソースを食べるようになる私は、代替ソリューションを提供したいと思いますが、私はいくつかのことで行かなければなりません仮定。

私の質問は、JSON またはこれを別の方法でこれに戻すために私のストアドプロシージャをやり直す必要がありますか?

あなたは、あなたが今、箱から出して「FOR JSON」句をサポートするMicrosoft SQLサーバー2016を実行していない限り、あなたがその余分なステップを避けることができれば、JSONを返す必要はありません。

私の最終目標はプロセスをできるだけ速くし、SQLクエリ は膨大であり、多くの行を返します。

ここでは「巨大な」「速い」が役割を果たすことができます。いずれの場合でも、Objective-CからXMLの権利を解析することもできます。これは、C#のファンの男の子のやり方であり、ala XmlReaderです。

のように、もちろんの薄いラッパーがあります。があります。そして、あなたのXMLに対する暫定的な例がここにあります。

- (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に例をまとめました。

関連する問題