0

我正在编写一个使用 REST Web 服务的 C# 版本 4 应用程序。这些 Web 服务是使用 ASP.NET MVC RESTful Web 服务方法编写的。这些 Web 服务方法中有一半返回具有多个根的 JSON 字符串(请参阅下面的示例 JSON 数据)。但是,对于特定的 JSON 响应(请参见下文),我想将多根JSON 响应字符串部分反序列化为我感兴趣的 Device 对象(例如,属于 Device 类),而不是所有数据响应。

我知道如何使用 C# .NET 库或 JSON.net 代码来反序列化只有一个根的 JSON 字符串。但我不确定如何处理多根 JSON 数据。请指教。谢谢你。

例如,使用以下 JSON 响应,我想检索“设备”对象(从 Device 类实例化)的数据,并忽略“version_info”和“SKU_info”数据。

以下 JSON 响应有 3 个根:“version_info”、“SKU_info”和“device”:

{
     “version_info” : { “version” : “1.0”, “owner_id” : 237},
     “SKU_info” : {“id” : 1928399, “active”: true},
     “device” : {
           “id”: 7732, “name” : “desktop computer ”, “parent_device_id”: 2982,
           “sub_devices”: 
           [   
                    {“id”: 7733, “name”: “fan”, “quantity” : 1 }, 
                    {“id”: 7734, “name”: “memory chip”, “quantity” : 4 },
                    {“id”: 7735, “name”: “CPU”, “quantity” : 1 },
                    {“id”: 7736, “name”: “hard disk”, “quantity” : 2 },
           ],
           “user_id” : 864
      }
}

还有我的 csutom “Device” 和 “SubDevice” 类:

public class Device
{
    public long Id;
    public string Name;
    public long ParentDeviceId;
    public List<SubDevice> Subdevices;
    public int UserId;
}


public class SubDevice
{
    public long Id;
    public string Name;
    public int Quantity;
}
4

1 回答 1

0

JSON 字符串确实有根。它只是未命名。

{  
     “version_info” : { “version” : “1.0”, “owner_id” : 237},
     “SKU_info” : {“id” : 1928399, “active”: true},
     “device” : {
           “id”: 7732, “name” : “desktop computer ”, “parent_device_id”: 2982,
           “sub_devices”: 
           [   
                    {“id”: 7733, “name”: “fan”, “quantity” : 1 }, 
                    {“id”: 7734, “name”: “memory chip”, “quantity” : 4 },
                    {“id”: 7735, “name”: “CPU”, “quantity” : 1 },
                    {“id”: 7736, “name”: “hard disk”, “quantity” : 2 },
           ],
           “user_id” : 864
      }
}

包装 JSON的{开头和结尾}定义了根对象。因此,如果您创建一个对象(命名任何您想要的名称),那么您可以反序列化为您的新对象。

例如:

public class Wrapper
{
     Version version_info { get; set; }
     SKU SKU_info { get; set; }
     Device device { get; set; }
}

为了忽略,您可以让它反序列化为您不打算使用的动态对象。这可能有效:

public class Wrapper
{
     dynamic version_info { get; set; }
     dynamic SKU_info { get; set; }
     Device device { get; set; }
}

Wrapper root = JsonConvert.DeserializeObject<Wrapper>(feed);
于 2013-02-03T15:30:44.003 回答