using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
public string [] Messages { get; set; }
[DataMember(Name = "message")]
object SerializedMessages
set => Messages = (value) switch
string s => new [] { s },
object [] a => a.Cast<IFormattable>().Select(f => Convert.ToString(f, CultureInfo.InvariantCulture)).ToArray(),
_ => throw new ArgumentException(string.Format("Unknown value type {0}", value)),
public static void Test()
foreach (var json in GetJson())
Console.WriteLine("\nDeserializing JSON: ");
var response = DataContractJsonSerializerHelper.FromContractJson<Response>(json);
Console.WriteLine("Result:");
var newJson = JsonConvert.SerializeObject(response, Formatting.Indented);
Console.WriteLine(newJson);
static IEnumerable<string> GetJson() =>
"message": "Hello World."
public static partial class DataContractJsonSerializerHelper
private static MemoryStream GenerateStreamFromString(string value)
return new MemoryStream(Encoding.UTF8.GetBytes(value ?? ""));
public static string ToContractJson<T>(this T obj, DataContractJsonSerializer serializer = null)
serializer = serializer ?? new DataContractJsonSerializer(obj == null ? typeof(T) : obj.GetType());
using (var memory = new MemoryStream())
serializer.WriteObject(memory, obj);
memory.Seek(0, SeekOrigin.Begin);
using (var reader = new StreamReader(memory))
return reader.ReadToEnd();
public static T FromContractJson<T>(string json, DataContractJsonSerializer serializer = null)
serializer = serializer ?? new DataContractJsonSerializer(typeof(T));
using (var stream = GenerateStreamFromString(json))
var obj = serializer.ReadObject(stream);
public static partial class DataContractJsonSerializerHelper
public static T FromContractJson<T>(string json, DataContractJsonSerializerSettings settings) =>
FromContractJson<T>(json, new DataContractJsonSerializer(typeof(T), settings));
public static string ToContractJson<T>(T obj, DataContractJsonSerializerSettings settings) =>
ToContractJson<T>(obj, new DataContractJsonSerializer(obj.GetType(), settings));
public static void Main()
Console.WriteLine("Environment version: {0} ({1}), {2}", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription , Environment.Version, Environment.OSVersion);
Console.WriteLine("Failed with unhandled exception: ");