3

次の 2 つのオブジェクトがあります (制御も変更もできません)。

[Serializable]
[DataContract]
public class AddressContactType : BaseModel
{
    public AddressContactType();

    [DataMember]
    public string AddressContactTypeName { get; set; }
}

[Serializable]
[DataContract]
public abstract class BaseModel
{
    protected BaseModel();

    [DataMember]
    public int Id { get; set; }
    [DataMember]
    public string NativePMSID { get; set; }
    [DataMember]
    public string PMCID { get; set; }
}

RestClient を使用して GET 呼び出しを行い、このデータを JSON で取得しています。リクエストは成功します。返される JSON は次のとおりです。

[{"Id":0,"NativePMSID":"1","PMCID":"1020","AddressContactTypeName":"Home"},{"Id":0,"NativePMSID":"2","PMCID":"1020","AddressContactTypeName":"Apartment"},{"Id":0,"NativePMSID":"3","PMCID":"1020","AddressContactTypeName":"Vacation"},{"Id":0,"NativePMSID":"3","PMCID":"1020","AddressContactTypeName":"Other"}]

その時点から、3 つの異なる方法でデータを逆シリアル化しようとします。

私のコード:

var request = new RestRequest("AddressContactType", Method.GET);
        request.AddHeader("Accept", "application/json");
        request.AddParameter("PMCID", "1020");

        #region JSON Deserialization

        // ---- Attempt #1
        var response = client.Execute<AddressContactType>(request);

        // ---- Attempt #2
        var myResults = response.Content;

        var ms = new MemoryStream(Encoding.UTF8.GetBytes(myResults));
        var ser = new DataContractJsonSerializer(typeof(AddressContactType));
        var result = (AddressContactType)ser.ReadObject(ms);

        // ---- Attempt #3
        var jsonSettings = new JsonSerializerSettings()
        {
            Formatting = Formatting.Indented,
            DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
            DateTimeZoneHandling = DateTimeZoneHandling.Utc,
            PreserveReferencesHandling = PreserveReferencesHandling.Objects
        };

        var result2 = new AddressContactType();
        result2 = JsonConvert.DeserializeObject<AddressContactType>(new StreamReader(ms).ReadToEnd(), jsonSettings);

        #endregion

試行 1 では、RestClient の試行で次のエラーが返されます。

試行 2 では、オブジェクトの結果は正しいプロパティ (Id、NativePMSID、PMCID、および AddressContactTypeName) で表示されますが、それらはすべて null であり、それぞれの 1 つのインスタンスのみが表示されます。

試行 3 は、結果 2 に対して null 値を返すだけです。

助言がありますか?

ありがとう。

4

1 に答える 1

3

私の問題の解決策は次のとおりです。

        List<AddressContactType> myResults2;

        using (Stream ms2 = new MemoryStream(Encoding.UTF8.GetBytes(myResults)))
        {
            myResults2 = JsonConvert.DeserializeObject<List<AddressContactType>>(new StreamReader(ms2).ReadToEnd());
        }

前のステップの 1 つに近かったのですが、これで完全なリストが得られました。

于 2012-11-21T17:26:11.187 に答える