2012-02-08 10 views
2

私がしなければならない限り、私は使用しないでください。私はものを行うPHPの方法が好きですが、私はObjectCollectionを使って私が必要とするデータを格納/検索することに固執しているようです。私は私のObjectsとコレクションを反復するコードをロードした私のCollectionがあります。私の問題は、PHPで呼び出されるように私は "キー"を取得することができませんです(私は実際にはこの名前を信じていますオブジェクト)。次の例を考えてみましょう:あなたが見ることができるように、私は、XML文書をナビゲートし、いくつかのキー/値のペアを持つObjectを作成していVB .NETでコレクションを繰り返す(連想配列のように)

  Dim xDoc As XPathDocument = New XPathDocument(fName) 
      Dim xNav As XPathNavigator = xDoc.CreateNavigator() 

      Dim sender As XPathNodeIterator 
      sender = xNav.Select("/data/sender/val") 
      While (sender.MoveNext()) 
       SenderInfo.Add(sender.Current.GetAttribute("n", ""), sender.Current.Value) 
      End While 

      For Each item As Object In SenderInfo 
       Dim value As String = item.ToString() 
       //need to store the key here 
       Dim key As String = Nothing 
      Next 

。それはJSONにあった場合、オブジェクトは次のようになります。

{"name":"John Smith","address1":"123 Anywhere St.","city":"This City","state":"FL"} 

を私は唯一のオブジェクトの値を取得することができますコレクションものの繰り返すが、私はKeyが必要な場合、この例では、私は「名前」をしたいです、 "address1"、 "city"、 "state"を変数に格納します。

アイデア?それとも私はこれについて間違った方法をとっていますか?

私は本当に助けをありがとう、私は本当にこの1つにこだわっています!

+0

SenderInfoがどこでどのように宣言されていますか?実際のデータを表すjsonサンプルですか?同じメッセージに複数のオブジェクトがありますか? –

+0

SenderInfoをCollectionとして定義しましたが、実際にはSystem.Collections.Specializedをインポートし、標準コレクションの代わりにNameValueCollectionを使用することに決めました。これにより、キー自体を繰り返し処理することができました(Collectionに.Keysはありません)。私は実際にそれがうまくいった。私は同じ問題を抱えている他の誰のためにも解決策を書くつもりです。 –

答えて

5

SenderInfoは、Dictionary<String,String>である必要があります。 Hereは、VB.NETを含むドキュメントとサンプルコードです。

+1

これも同様に動作し、私はSystems.Collections.Specialized名前空間からNameValueCollectionを選択しました。これは実際には連想配列のほぼ正確なレプリカです!これを問題解決のための2つの方法が含まれているので、これを受け入れられた答えとして選択します。 –

3

あなたがこのコードで何をしたいのかは今確かではありません。それは、私が代わりにすることをお勧めする世界のすべての違いを生み出すことができます。このようなものを使用して、既存のコードを置き換え、その後

<Serializable()> 
Public Class Sender 

    Public Property Name 
    Public Property Address1 
    Public Property City 
    Public Property State 

End Class 

そして:しかし、それはあなたが本当にこのようなクラスをしたいように聞こえる

Dim xmlRdr As New Xml.Serialization.XmlSerializer(GetType(Sender)) 

Using fileStream As New StreamReader(fName) 
    Dim mySender As Sender = xmlRdr.Deserialize(fileStream) 
End Using 

あなたはおそらくにクラスにいくつかのより多くの属性が必要になりますデシリアライザがxmlがどのように見えるかを調整します。ここでシリアライズについて詳しく読むことができます:
http://msdn.microsoft.com/en-us/library/ms950721.aspx

+0

また、これを処理するクラスを持つことは、私が既にPHPラッパーを作成した独自の配送サーバーと相互作用しているので、将来的には素晴らしいことですアイデア、共有ありがとう! –