次のオブジェクト タイプを表す 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();
}
}