C#RestSharp - 反序列化非标准JSON

时间:2016-07-04 06:34:39

标签: c# json serialization

我正在尝试使用RestSharp来反序列化JSON字符串。然而,我被#34; 555111222"周围的略微非标准结构所困扰。部分。

数字555111222是设备序列号,因此它可以更改,或者JSON响应中可以有多个序列号。

<?php
 namespace frontend\models;

 use common\models\User;
 use yii\base\Model;
  use Yii;

class PasswordResetRequestForm extends Model
 {
public $email;


  public function rules()
    {
    return [
       // ['email', 'filter', 'filter' => 'trim'],
        ['email', 'required'],
        ['email', 'email'],
         ['email', 'exist',
            'targetClass' => '\common\models\User',
            'filter' => ['status' => User::STATUS_ACTIVE],
            'message' => 'There is no user with such email.'
        ],
    ];
  }
 }

Json2csharp.com给了我以下

{
"requestid": "42",
"data": {
    "555111222": {
        "gps_data": [
            {
                "longitude": -73.952284,
                "latitude": 40.755988,
                "time": "2016-06-30 09:41:21"
            },
            {
                "longitude": -73.952284,
                "latitude": 40.755988,
                "time": "2016-06-30 09:41:22"
            },
            {
                "longitude": -73.952284,
                "latitude": 40.755988,
                "time": "2016-06-30 09:41:23"
            }
        ]
    }
  }
}

我不确定如何处理班上的 invalid_type 错误。

谢谢

1 个答案:

答案 0 :(得分:5)

我认为您的Data属性应为Dictionary<string, GpsDataWrapper>,其中GpsDataWrapper只是一个具有GpsData属性的类:

public class GpsData
{
    public double longitude { get; set; }
    public double latitude { get; set; }
    public string time { get; set; }
}

public class GpsDataWrapper
{
    public List<GpsData> gps_data { get; set; }
}

public class RootObject
{
    public string requestid { get; set; }
    public Dictionary<string, GpsDataWrapper> data { get; set; }
}

我个人然后将所有这些转换为使用.NET命名约定并应用属性来指定JSON中使用的名称。