C# 处理多个响应和空值

C# 处理多个响应和空值,c#,web-services,c#-4.0,json.net,C#,Web Services,C# 4.0,Json.net,实际上,我正试图将来自PHP web服务的JSON请求响应解析为c#对象 我发现了一些使用json.net的代码示例,然后我从Wine类中编写了以下代码: public Wine(string json) { JObject jObject = JObject.Parse(json); BottleName = (string)jObject["name"]; Category = (string)jObject["category"];

实际上,我正试图将来自PHP web服务的JSON请求响应解析为c#对象

我发现了一些使用json.net的代码示例,然后我从Wine类中编写了以下代码:

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"]);
    }
如果a只有1个响应,那么它就可以完美地工作

"{\"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\"} "
但是,当我的Json响应中有另一个Json字符串时,我遇到了麻烦,我希望知道如何处理它

我有时有空字段,我怎么能忽略它们呢

谢谢你的帮助!:-)

另外,如果需要的话,这是我从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);

      }

如果从
mysqli_fetch
语句返回了多行,那么在不将响应放入数组的情况下为每行回显json响应将产生错误的json。您的回答基本上如下所示:

{..some data...}{...some data...}
[{...some data...},{...some data...},]
因此,让我们利用JSON的数组结构。将PHP代码更改为像数组一样输出

$res = mysqli_query($connection, $req);
echo "[";
while($data= mysqli_fetch_assoc($res)) {
    extract ($data);
    echo json_encode($data);
    echo ",";
}
echo "]";
这会给你类似的东西:

{..some data...}{...some data...}
[{...some data...},{...some data...},]
记住,这很艰难。您需要修剪结束括号前的最后一个逗号。但这是一个有效的JSON数组


您还需要修改C#以将jObject作为一个对象数组而不是一个对象进行处理。

好的,如果您试图处理获取多个
Wine
实例,并且希望忽略json.net中的空值,您可以这样做:

var settings = new JsonSerializerSettings{ NullValueHandling = NullValueHandling.Ignore };
                                                                               }
JsonConvert.DeserializeObject<IEnumerable<Wine>>(response.ToString(), settings);
var settings=newjsonserializersettings{NullValueHandling=NullValueHandling.Ignore};
}
反序列化对象(response.ToString(),设置);

你说“当我的Json响应中有另一个Json字符串,我希望知道如何处理它”是什么意思?你是说你的Json包含多个
Wine
实例,还是说在同一个字符串中有第二个不同的类?我是说我有另一个Wine实例我将尝试一下你们两人在这里写的内容,我觉得这正是我需要的谢谢!