2012-04-23 9 views
0

実際には、PHP WebサービスからJSON要求応答を解析して、C#オブジェクトにしています。複数の応答とnull値を扱う

私はjson.netを使用して、いくつかのコードサンプルを見つけたし、私は私のワインクラスからこのコードを作った:

public Wine(string json) 
    { 
     JObject jObject = JObject.Parse(json); 
     BottleName = (string)jObject["name"]; 
     Category = (string)jObject["category"]; 
     Prize50 = Double.Parse((string)jObject["prize_50"]); 
     Prize75 = Double.Parse((string)jObject["prize_75"]); 
     Prize150 = Double.Parse((string)jObject["prize_150"]); 
     Prize300 = Double.Parse((string)jObject["prize_300"]); 
    } 

"{\"id\":\"2\",\"name\":\"Pinot noir\",\"loc_wine\":\"",\"category\":\"Red\",\"prize_50\":\"12.800000\",\"prize_75\":\"16.500000\",\"prize_150\":\"0.000000\",\"prize_300\":\"0.000000\"} " 

のようなだけ1応答を持っている場合、それは完璧に動作していますしかし、私は私のjsonレスポンスに別のJson文字列を持っているときに困っています。どうすれば対処できますか?

フィールドがnullの場合もありますが、どうすれば無視できますか?

ありがとうございました! :-)

P.S.必要であれば、これは私が私のPHPファイルから私の件のデータを送信する方法である:

 $req = "SELECT * 
     FROM t_wine 
     WHERE name= \"Pinot noir\""; // for test purpose 


     $res = mysqli_query($connection, $req); 
     while($data= mysqli_fetch_assoc($res)) { 
      extract ($data); 
      echo json_encode($data); 

     } 
+0

私が持っているとき、あなたは「とはどういう意味ですか私のjsonの応答の別のJsonの文字列と私はそれをどう対処することができますか?あなたのjsonに「Wine」のインスタンスが複数含まれていることを意味しますか、同じ文字列に別のクラスが2つあることを意味しますか? – SouthShoreAK

+0

私はワインの別のインスタンスを持っていることを意味する – Edelweiss

答えて

2

つ以上の行が、配列に応答をかけることなく、各行に対するJSONレスポンスをエコー、mysqli_fetchのステートメントからが返された場合あなたに悪いJSONを与えるでしょう。応答は基本的に次のようになります。

{..some data...}{...some data...} 

JSONの配列構造を利用しましょう。このように何かを与える配列

$res = mysqli_query($connection, $req); 
echo "["; 
while($data= mysqli_fetch_assoc($res)) { 
    extract ($data); 
    echo json_encode($data); 
    echo ","; 
} 
echo "]"; 

のように出力するPHPコードを変更します。

[{...some data...},{...some data...},] 

は覚えておいて、これは荒いです。最後のカンマの前にカンマをトリムする必要があります。しかし、これは有効なJSON配列です。

また、jObjectを1つのオブジェクトではなくオブジェクトの配列として処理するには、C#を変更する必要があります。

+0

私はあなたの両方がここに書いたものを試してみる、私はこれがまさに私が必要としている感謝を持っていますありがとう! – Edelweiss

0

[OK]をあなたがWineの複数のインスタンスを取得して処理するようにしようとしている、とあなたはjson.netでNULL値を無視したい場合は、あなたがこれを行うことができます:

var settings = new JsonSerializerSettings{ NullValueHandling = NullValueHandling.Ignore }; 
                       } 
JsonConvert.DeserializeObject<IEnumerable<Wine>>(response.ToString(), settings);