2

クラスはこちら

 public class ModelingData : BaseEquatable<ModelingData>
    {
        [JsonConverter(typeof(DecimalToStringConvertor))]
        public decimal? ActualValue { get; set; }

        public string DisplayValue { get; set; }

        public override bool Equals(ModelingData other)
        {
            if (ReferenceEquals(null, other)) return false;
            if (ReferenceEquals(this, other)) return true;
            return Equals(other.ActualValue, ActualValue);
        }
    }

そして、私はクラスを作成しました

public class DecimalToStringConvertor : JsonConverter
    {
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            string javaScriptTicks = !string.IsNullOrWhiteSpace(Convert.ToString(value)) ? value.ToString() : string.Empty;
            writer.WriteValue(javaScriptTicks);
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (existingValue == null)
            {
                return 0M;
            }

            return Convert.ToDecimal(existingValue);
        }

        public override bool CanConvert(Type objectType)
        {
            return true;
        }
    }

今、逆シリアル化しようとすると、ReadJson メソッドの existingValue パラメータで常に null が返されます。WriteJson では問題なく動作しています。

JsonConverter を使用して文字列を 10 進プロパティに逆シリアル化するにはどうすればよいですか?

4

2 に答える 2

1

http://james.newtonking.com/projects/json/help/index.html?topic=html/SerializationAttributes.htmのヘルプ トピックを読むと、「メンバーまたはクラスをシリアル化するときに、指定された JsonConverter を使用するよう JsonSerializer に指示します。 " したがって、JsonConverter 属性は逆シリアル化には使用されず、オブジェクトのシリアル化にのみ使用されるようです。

代わりに、クラスの新しいインスタンスをパラメーターとして JsonConvert.DeserializeObject 関数に渡そうとすると、次のようになります。

ModelingData md = JsonConvert.DeserializeObject<ModelingData>(jsonData, new DecimalToStringConvertor());

もっと成功するべきだと思います。

于 2013-04-24T02:56:04.323 に答える
-1

JavaScriptSerializer を使用してタスクを実行できます。

System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
string sJSON = oSerializer.Serialize(oList);

サンプル サービス スタック ソリューションからの json シリアライゼーション用のライブラリも多数あります。

于 2013-01-16T06:00:15.337 に答える