2016-09-16 7 views
1

Ich verwende JsonConvert.SerializeObject, um ein Modellobjekt zu serialisieren. Der Server erwartet alle Felder als Zeichenfolgen. Mein Modellobjekt verfügt über numerische Eigenschaften und Zeichenfolgeneigenschaften. Ich kann dem Modellobjekt keine Attribute hinzufügen. Gibt es eine Möglichkeit, alle Eigenschaftswerte als Strings zu serialisieren? Ich muss nur die Serialisierung und nicht die Deserialisierung unterstützen.Json.net serialize numerische Eigenschaften als Zeichenfolge

+2

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

+1

@CodeJoy: Das scheint ziemlich DataTable-konzentrierte sich auf mich - ich kann nicht sehen Wie einige dieser Antworten dem OP helfen werden. –

+0

Siehe [Lange Zahl als Zeichenfolge in der Serialisierung konvertieren] (https://stackoverflow.com/questions/17369278/convert-long-number-as-string-in-the-serialization). – dbc

Antwort

6

Sie können Ihre eigenen JsonConverter auch für numerische Typen bereitstellen. Ich habe das gerade versucht, und es funktioniert - es ist schnell und schmutzig, und Sie wollen an Sicherheit grenzender Wahrscheinlichkeit, sie verlängern anderen numerischen Typen zu unterstützen (long, float, double, decimal usw.), aber es sollten Sie gehen:

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)); 
    } 
} 
Verwandte Themen