1
私は望むタイプ(例えばint64の代わりにint32)を定義するためにオブジェクト[]のjsonコンバータを作成しようとしています。オブジェクト[]のReadJsonメソッドを正しくオーバーライドするにはどうすればよいですか?
これは私が今まで得たものである:
オブジェクト:
[JsonObject]
public class tipo
{
public string teste { get; set; }
[JsonConverter(typeof(TestConverter))]
public object[] metodos { get; set; }
}
メイン:
string call = JsonConvert.SerializeObject(new tipo { teste="nota",
metodos = new object[] { 10, (decimal)10.5, "Teste123" } });
tipo t = JsonConvert.DeserializeObject<tipo>(call);
JsonConverter:
namespace Newtonsoft.Json
{
public class TestConverter : JsonConverter
{
#region Overrides of JsonConverter
public override bool CanWrite { get { return false; } }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
List<object> resultado = new List<object>();
string propertyName = reader.Value as string;
while (reader.Read())
{
object value = null;
switch (reader.TokenType)
{
case JsonToken.Integer:
value = Convert.ToInt32(reader.Value);
resultado.Add(value);
break;
case JsonToken.Float:
value = Convert.ToDecimal(reader.Value);
resultado.Add(value);
break;
case JsonToken.String:
value = Convert.ToString(reader.Value);
resultado.Add(value);
break;
case JsonToken.Boolean:
value = Convert.ToBoolean(reader.Value);
resultado.Add(value);
break;
case JsonToken.Null:
value = null;
resultado.Add(value);
break;
case JsonToken.Date:
value = Convert.ToDateTime(reader.Value);
resultado.Add(value);
break;
case JsonToken.Bytes:
value = Convert.ToByte(reader.Value);
resultado.Add(value);
break;
default:
Console.WriteLine("Default case");
Console.WriteLine(reader.TokenType.ToString());
break;
}
}
return resultado.ToArray();
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(object[]);
}
#endregion
}
}
私は出力をチェックしますすべてが大丈夫です、hそれは私に直列化復元中に次のエラーが返されますowever:
タイプの未処理の例外「Newtonsoft.Json.JsonSerializationExceptionは」Newtonsoft.Json.dll
で発生しました追加情報:予期しない終了をオブジェクトをデシリアライズするとき。パス ''、1行目、47行目。
これを解決する方法はありますか?
ありがとうございました!