web-dev-qa-db-ja.com

JSON配列を使用したRestSharp逆シリアル化

RestSharp で逆シリアル化しようとしているJSON応答があり、次のようになります。

{"devices":[{"device":{"id":7,"deviceid":"abc123","name":"Name"}},
            {"device":{"id":1,"deviceid":"def456","name":"Name"}}],
 "total":2,
 "start":0,
 "count":2}

私が見つけたいくつかの提案に基づいて、私は次のように私のPOCOを設定しようとしました:

public class DevicesList
{
    public List<DeviceContainer> Devices;
}

public class DeviceContainer
{
    public Device Device;
}

public class Device
{
    public int Id { get; set; }
    public string DeviceId { get; set; }
    public string Name { get; set; }
}

そして、私の実行は次のようになります:

// execute the request
var response = client.Execute<DevicesList>(request);

しかしながら、 response.DataはNULLであり、他のバリエーションを試しましたが、運がありませんでした。

それで、この状況ではどのクラス構造とマッピングを使用する必要がありますか?追加のDeviceContainerクラスなしでこれも試しました。

助けてくれてありがとう。

19
Garrett Vlieger

RestSharponlyはプロパティで動作し、フィールドに逆シリアル化されないため、DevicesDeviceを必ず変換してくださいプロパティへのフィールド。

また、Content-Type応答の場合、応答がデフォルト以外のものである場合、RestSharpはJsonDeserializerをまったく使用しない場合があります。私の答えを参照してください RestSharpクライアントはJSON応答を逆シリアル化するとすべてのプロパティをnullとして返します

18
Pete

逆シリアル化POCOに配列が含まれていると、少し異なる問題が発生しました。

Devices[]からList<Devices>に変更すると、問題が解決し、正しくデシリアライズされました。

28
Boycs

私が遭遇したものは、IEnumerableまたはIListのようなインターフェイスを使用している場合は機能しません、具体的な型でなければなりません。

これは機能しません。json.netのような他のjsonシリアライザーの場合とは異なります。

public class DevicesList
{
    public IEnumerable<DeviceContainer> Devices { get; set; }
}

public class DeviceContainer
{
   ...
}

次のようにする必要があります。

public class DevicesList
{
    public List<DeviceContainer> Devices { get; set; }
}

public class DeviceContainer
{
   ...
}
3
lockwobr

RestShartpはDataAnnotation/DataMemberをサポートしていません。majなしでプロパティの名前を変更します。

  • デバイス->デバイス
  • デバイス->デバイス

そして{get; set;};)を忘れないでください。

2
Niels

私の問題はまったく異なり、JsonDeserializerJsonProperty属性をサポートしていると単純に思っていましたが、そうではありません。だから逆シリアル化しようとすると

public class AvailableUserDatasApi
{
    [JsonProperty("available-user-data")]
    public List<AvailableUserDataApi> AvailableUserDatas { get; set; }
}

失敗しました。しかし、AvailableUserDatasAvailableUserDataに変更するだけで、作業を開始できました。

0
Michal Hosala