using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Xml.Serialization;
using System.Runtime.Serialization;
[DataContract(Name = "CountriesAndCities", Namespace = "https://stackoverflow.com/q/76137206")]
public class CountriesAndCities
public Dictionary<string, List<string>> DictCountriesAndCities { get; set; } = new ();
public static void Test()
CountriesAndCities container = new()
["entry1"] = new() { "a", "b", "c" },
["entry2"] = new() { "a", "b", "c" },
var fileName = "Question76137206.xml";
using (var writer = XmlWriter.Create(fileName, new XmlWriterSettings {Indent = true} ))
(new DataContractSerializer(container.GetType())).WriteObject(writer, container);
Console.WriteLine(File.ReadAllText(fileName));
CountriesAndCities container2;
using (var reader = XmlReader.Create(fileName))
container2 = (CountriesAndCities)(new DataContractSerializer(container.GetType())).ReadObject(reader);
Assert.That(container.DictCountriesAndCities.Count == container2.DictCountriesAndCities.Count);
var json1 = JsonSerializer.Serialize(container, new JsonSerializerOptions { WriteIndented = true });
var json2 = JsonSerializer.Serialize(container2, new JsonSerializerOptions { WriteIndented = true });
Assert.AreEqual(json1, json2);
using (var stream = File.Create(fileName))
JsonSerializer.Serialize(stream, container, new JsonSerializerOptions { WriteIndented = true });
CountriesAndCities container3;
using (var stream = File.OpenRead(fileName))
container3 = JsonSerializer.Deserialize<CountriesAndCities>(stream);
var json3 = JsonSerializer.Serialize(container2, new JsonSerializerOptions { WriteIndented = true });
Assert.AreEqual(json1, json3);
Console.WriteLine("\nJSON generated by JsonSerializer:");
Console.WriteLine(json3);
public static partial class DataContractSerializerHelper
public static string ToContractXml<T>(this T obj, DataContractSerializer serializer = null, XmlWriterSettings settings = null)
serializer = serializer ?? new DataContractSerializer(obj == null ? typeof(T) : obj.GetType());
using (var textWriter = new StringWriter())
settings = settings ?? new XmlWriterSettings { Indent = true };
using (var xmlWriter = XmlWriter.Create(textWriter, settings))
serializer.WriteObject(xmlWriter, obj);
return textWriter.ToString();
public static T FromContractXml<T>(string xml, DataContractSerializer serializer = null)
using (var textReader = new StringReader(xml ?? ""))
using (var xmlReader = XmlReader.Create(textReader))
return (T)(serializer ?? new DataContractSerializer(typeof(T))).ReadObject(xmlReader);
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: ");