2016-09-16 8 views
1

JsonConvert.SerializeObjectを使用してモデルオブジェクトをシリアル化しています。 サーバーは、すべてのフィールドを文字列として認識します。私のモデルオブジェクトには、数値プロパティと文字列プロパティがあります。モデルオブジェクトに属性を追加することはできません。すべてのプロパティ値を文字列であるかのようにシリアル化する方法はありますか?私は直列化のみをサポートしなければならず、逆シリアル化はサポートしなくてはなりません。Json.netは数値プロパティを文字列としてシリアル化します

+2

http://stackoverflow.com/questions/37475997/convert-int-to-string-while-serialize-object-using-json-net –

+1

@CodeJoy:それはかなりDataTableに焦点を当てているようです - 私は見ることができませんどのようにそれらの答えがOPに役立つだろうか。 –

+0

[長い番号をシリアル化の文字列として変換](https://stackoverflow.com/questions/17369278/convert-long-number-as-string-in-the-serialization)を参照してください。 – dbc

答えて

6

数値型の場合でもJsonConverterを指定することができます。私はこれを試してみた、それが動作します - それは迅速かつ汚いだ、とあなたはほぼ確実に他の数値タイプ(longfloatdoubledecimalなど)をサポートするためにそれを拡張したいが、それはあなたが軌道に乗る必要があります。

using System; 
using System.Globalization; 
using Newtonsoft.Json; 

public class Model 
{ 
    public int Count { get; set; } 
    public string Text { get; set; } 

} 

internal sealed class FormatNumbersAsTextConverter : JsonConverter 
{ 
    public override bool CanRead => false; 
    public override bool CanWrite => true; 
    public override bool CanConvert(Type type) => type == typeof(int); 

    public override void WriteJson(
     JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     int number = (int) value; 
     writer.WriteValue(number.ToString(CultureInfo.InvariantCulture)); 
    } 

    public override object ReadJson(
     JsonReader reader, Type type, object existingValue, JsonSerializer serializer) 
    { 
     throw new NotSupportedException(); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var model = new Model { Count = 10, Text = "hello" }; 
     var settings = new JsonSerializerSettings 
     { 
      Converters = { new FormatNumbersAsTextConverter() } 
     }; 
     Console.WriteLine(JsonConvert.SerializeObject(model, settings)); 
    } 
} 
関連する問題