using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO.MemoryMappedFiles;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Xml.Serialization;
using Debug = System.Console;
public static partial class DataContractSerializerExtensions
public static IEnumerable<T?> ReadObjectFragments<T>(Stream stream, DataContractSerializer? serializer = null, bool closeInput = true)
var settings = new XmlReaderSettings
ConformanceLevel = ConformanceLevel.Fragment,
serializer ??= new DataContractSerializer(typeof(T));
using (var outerReader = XmlReader.Create(stream, settings))
while (outerReader.Read())
if (outerReader.NodeType == XmlNodeType.Element)
using (var innerReader = outerReader.ReadSubtree())
yield return (T?)serializer.ReadObject(innerReader);
public static void Test()
using (var mmf = MemoryMappedFile.CreateFromFile("/dev/shm/test", System.IO.FileMode.OpenOrCreate, null, 10240, MemoryMappedFileAccess.ReadWrite))
WriteToMemoryMappedFile(mmf);
var infoObj = ReadFromMemoryMappedFile(mmf);
Console.WriteLine(infoObj?.Name);
Assert.That(infoObj?.Name == "TestApp");
private static void WriteToMemoryMappedFile(MemoryMappedFile mmf)
var serializer = new DataContractSerializer(typeof(SampleClass));
var infoObj = new SampleClass { Name = "TestApp" };
using (var stream = mmf.CreateViewStream(0, 0, MemoryMappedFileAccess.Write))
Debug.WriteLine(stream.Length);
serializer.WriteObject(stream, infoObj);
private static SampleClass? ReadFromMemoryMappedFile(MemoryMappedFile mmf)
using (var stream = mmf.CreateViewStream(0, 0, MemoryMappedFileAccess.Read))
return DataContractSerializerExtensions.ReadObjectFragments<SampleClass>(stream).FirstOrDefault();
public string? Name { get; set; }
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: ");