0

次のオブジェクト タイプを表す JSON 文字列があります。

public partial class Address
{
    public Address()

    public string Country { get; set; }
    public string StreetNo { get; set; }
    public string City { get; set; }
    public string Zip { get; set; }
    public string Complement { get; set; }
    public Nullable<int> Latitude { get; set; }
    public Nullable<int> Longitude { get; set; }
    public Nullable<int> Altitude { get; set; }
    public string Url { get; set; }
    public System.DateTime LastModified { get; set; }
    public byte[] Version { get; set; }
    public string StateCode { get; set; }
    public string Street { get; set; }
    public string RecordStatus { get; set; }
    public int UserId { get; set; }
    public int AddressId { get; set; }
    public Dictionary<string, object> OriginalValues { get; set; }
}

JSON 文字列を上記のオブジェクトに逆シリアル化する JsonConverter を作成しようとしています。コード内にディクショナリを作成するために、コンバーターに何を追加すればよいか悩んでいます。これまでのコンバーターのコードは次のようになります。

    public class AddressConverter : JsonConverter
{

    public override bool CanConvert(Type objectType)
    {
        var temp = objectType == typeof(Address);
        return temp;
    }

    public override object ReadJson(JsonReader reader, Type objectType
        , object existingValue, JsonSerializer serializer)
    {
        var obj = JObject.Load(reader);

        var model = new Address();

        model.Country = Convert.ToString(((JValue)obj["Country"]).Value);
        model.StreetNo = Convert.ToString(((JValue)obj["StreetNo"]).Value);
        model.City = Convert.ToString(((JValue)obj["City"]).Value);
        model.Zip = Convert.ToString(((JValue)obj["Zip"]).Value);
        model.Complement = Convert.ToString(((JValue)obj["Complement"]).Value);
        model.Latitude = Convert.ToInt32(((JValue)obj["Latitude"]).Value);
        model.Longitude = Convert.ToInt32(((JValue)obj["Longitude"]).Value);
        model.Altitude = Convert.ToInt32(((JValue)obj["Altitude"]).Value);
        model.Url = Convert.ToString(((JValue)obj["Url"]).Value);
        model.LastModified = Convert.ToDateTime(((JValue)obj["LastModified"]).Value);
        model.StateCode = Convert.ToString((((JValue)obj["Country"]).Value));
        model.Street = Convert.ToString(((JValue)obj["StateCode"]).Value);
        model.RecordStatus = Convert.ToString(((JValue)obj["RecordStatus"]).Value);
        model.UserId = Convert.ToInt32(((JValue)obj["UserId"]).Value);
        model.AddressId = Convert.ToInt32(((JValue)obj["AddressId"]).Value);

        var encodedString = ((JValue) obj["Version"]).Value.ToString();
        model.Version = Convert.FromBase64String(encodedString);

// ここに辞書コードを追加します

        return model;
    }

    public override bool CanWrite
    {
        get
        {
            return false;
        }
    }
    public override void WriteJson(JsonWriter writer, object value
        , JsonSerializer serializer)
    {
        serializer.Serialize(writer, value);
        throw new NotImplementedException();
    }
}
4

1 に答える 1

0

このカスタム コンバーターで何を達成しようとしているのかわかりません。しかし、ここにあなたが望むものがあります。

// Dictionary code here
model.OriginalValues = (Dictionary<string, object>)JsonConvert.DeserializeObject(obj["OriginalValues"].ToString(), typeof(Dictionary<string, object>));
于 2013-04-24T09:31:41.393 に答える