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
クラスなしでこれも試しました。
助けてくれてありがとう。
RestSharponlyはプロパティで動作し、フィールドに逆シリアル化されないため、Devices
とDevice
を必ず変換してくださいプロパティへのフィールド。
また、Content-Type
応答の場合、応答がデフォルト以外のものである場合、RestSharpはJsonDeserializerをまったく使用しない場合があります。私の答えを参照してください RestSharpクライアントはJSON応答を逆シリアル化するとすべてのプロパティをnullとして返します
逆シリアル化POCOに配列が含まれていると、少し異なる問題が発生しました。
Devices[]
からList<Devices>
に変更すると、問題が解決し、正しくデシリアライズされました。
私が遭遇したものは、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
{
...
}
RestShartpはDataAnnotation/DataMemberをサポートしていません。majなしでプロパティの名前を変更します。
そして{get; set;}
;)を忘れないでください。
私の問題はまったく異なり、JsonDeserializer
はJsonProperty
属性をサポートしていると単純に思っていましたが、そうではありません。だから逆シリアル化しようとすると
public class AvailableUserDatasApi
{
[JsonProperty("available-user-data")]
public List<AvailableUserDataApi> AvailableUserDatas { get; set; }
}
失敗しました。しかし、AvailableUserDatas
をAvailableUserData
に変更するだけで、作業を開始できました。