<PackageReference Include="System.Drawing.Common" Version="10.0.0-preview.2.25163.9" />

CoreNrbfSerializer

Core NRBF serializer. Supports common .NET types.
using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Drawing; using System.Formats.Nrbf; using System.IO; using System.Private.Windows.BinaryFormat; using System.Reflection.Metadata; using System.Runtime.CompilerServices; using System.Text; namespace System.Private.Windows.Nrbf { [NullableContext(1)] [Nullable(0)] internal class CoreNrbfSerializer : INrbfSerializer { [Nullable(new byte[] { 2, 1, 1 })] private static Dictionary<TypeName, Type> s_knownTypes; public static bool TryWriteObject(Stream stream, object value) { if (!BinaryFormatWriter.TryWriteFrameworkObject(stream, value) && !BinaryFormatWriter.TryWriteJsonData(stream, value)) return BinaryFormatWriter.TryWriteDrawingPrimitivesObject(stream, value); return true; } bool INrbfSerializer.TryWriteObject(Stream stream, object value) { return this.TryWriteObject(stream, value); } public static bool TryGetObject(SerializationRecord record, [Nullable(2)] [NotNullWhen(true)] out object value) { if (!record.TryGetFrameworkObject(out value)) return record.TryGetDrawingPrimitivesObject(out value); return true; } bool INrbfSerializer.TryGetObject(SerializationRecord record, [Nullable(2)] [NotNullWhen(true)] out object value) { return this.TryGetObject(record, out value); } public static bool TryBindToType(TypeName typeName, [Nullable(2)] [NotNullWhen(true)] out Type type) { if (s_knownTypes == null) { Dictionary<TypeName, Type> obj = new Dictionary<TypeName, Type>(60, TypeNameComparer.FullNameMatch) { { TypeName.Parse("System.Byte".AsSpan(), null), typeof(byte) }, { TypeName.Parse("System.SByte".AsSpan(), null), typeof(sbyte) }, { TypeName.Parse("System.Int16".AsSpan(), null), typeof(short) }, { TypeName.Parse("System.UInt16".AsSpan(), null), typeof(ushort) }, { TypeName.Parse("System.Int32".AsSpan(), null), typeof(int) }, { TypeName.Parse("System.UInt32".AsSpan(), null), typeof(uint) }, { TypeName.Parse("System.Int64".AsSpan(), null), typeof(long) }, { TypeName.Parse("System.UInt64".AsSpan(), null), typeof(ulong) }, { TypeName.Parse("System.Double".AsSpan(), null), typeof(double) }, { TypeName.Parse("System.Single".AsSpan(), null), typeof(float) }, { TypeName.Parse("System.Char".AsSpan(), null), typeof(char) }, { TypeName.Parse("System.Boolean".AsSpan(), null), typeof(bool) }, { TypeName.Parse("System.String".AsSpan(), null), typeof(string) }, { TypeName.Parse("System.Decimal".AsSpan(), null), typeof(decimal) }, { TypeName.Parse("System.DateTime".AsSpan(), null), typeof(DateTime) }, { TypeName.Parse("System.TimeSpan".AsSpan(), null), typeof(TimeSpan) }, { TypeName.Parse("System.IntPtr".AsSpan(), null), typeof(IntPtr) }, { TypeName.Parse("System.UIntPtr".AsSpan(), null), typeof(UIntPtr) }, { TypeName.Parse("System.NotSupportedException".AsSpan(), null), typeof(NotSupportedException) } }; System.Text.ValueStringBuilder builder = new System.Text.ValueStringBuilder(4, 2); builder.AppendFormatted("System.Collections.Generic.List`1"); builder.AppendLiteral("[["); builder.AppendFormatted("System.Boolean"); builder.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder), typeof(List<bool>)); System.Text.ValueStringBuilder builder2 = new System.Text.ValueStringBuilder(4, 2); builder2.AppendFormatted("System.Collections.Generic.List`1"); builder2.AppendLiteral("[["); builder2.AppendFormatted("System.Char"); builder2.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder2), typeof(List<char>)); System.Text.ValueStringBuilder builder3 = new System.Text.ValueStringBuilder(4, 2); builder3.AppendFormatted("System.Collections.Generic.List`1"); builder3.AppendLiteral("[["); builder3.AppendFormatted("System.String"); builder3.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder3), typeof(List<string>)); System.Text.ValueStringBuilder builder4 = new System.Text.ValueStringBuilder(4, 2); builder4.AppendFormatted("System.Collections.Generic.List`1"); builder4.AppendLiteral("[["); builder4.AppendFormatted("System.SByte"); builder4.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder4), typeof(List<sbyte>)); System.Text.ValueStringBuilder builder5 = new System.Text.ValueStringBuilder(4, 2); builder5.AppendFormatted("System.Collections.Generic.List`1"); builder5.AppendLiteral("[["); builder5.AppendFormatted("System.Byte"); builder5.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder5), typeof(List<byte>)); System.Text.ValueStringBuilder builder6 = new System.Text.ValueStringBuilder(4, 2); builder6.AppendFormatted("System.Collections.Generic.List`1"); builder6.AppendLiteral("[["); builder6.AppendFormatted("System.Int16"); builder6.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder6), typeof(List<short>)); System.Text.ValueStringBuilder builder7 = new System.Text.ValueStringBuilder(4, 2); builder7.AppendFormatted("System.Collections.Generic.List`1"); builder7.AppendLiteral("[["); builder7.AppendFormatted("System.UInt16"); builder7.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder7), typeof(List<ushort>)); System.Text.ValueStringBuilder builder8 = new System.Text.ValueStringBuilder(4, 2); builder8.AppendFormatted("System.Collections.Generic.List`1"); builder8.AppendLiteral("[["); builder8.AppendFormatted("System.Int32"); builder8.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder8), typeof(List<int>)); System.Text.ValueStringBuilder builder9 = new System.Text.ValueStringBuilder(4, 2); builder9.AppendFormatted("System.Collections.Generic.List`1"); builder9.AppendLiteral("[["); builder9.AppendFormatted("System.UInt32"); builder9.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder9), typeof(List<uint>)); System.Text.ValueStringBuilder builder10 = new System.Text.ValueStringBuilder(4, 2); builder10.AppendFormatted("System.Collections.Generic.List`1"); builder10.AppendLiteral("[["); builder10.AppendFormatted("System.Int64"); builder10.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder10), typeof(List<long>)); System.Text.ValueStringBuilder builder11 = new System.Text.ValueStringBuilder(4, 2); builder11.AppendFormatted("System.Collections.Generic.List`1"); builder11.AppendLiteral("[["); builder11.AppendFormatted("System.UInt64"); builder11.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder11), typeof(List<ulong>)); System.Text.ValueStringBuilder builder12 = new System.Text.ValueStringBuilder(4, 2); builder12.AppendFormatted("System.Collections.Generic.List`1"); builder12.AppendLiteral("[["); builder12.AppendFormatted("System.Single"); builder12.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder12), typeof(List<float>)); System.Text.ValueStringBuilder builder13 = new System.Text.ValueStringBuilder(4, 2); builder13.AppendFormatted("System.Collections.Generic.List`1"); builder13.AppendLiteral("[["); builder13.AppendFormatted("System.Double"); builder13.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder13), typeof(List<double>)); System.Text.ValueStringBuilder builder14 = new System.Text.ValueStringBuilder(4, 2); builder14.AppendFormatted("System.Collections.Generic.List`1"); builder14.AppendLiteral("[["); builder14.AppendFormatted("System.Decimal"); builder14.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder14), typeof(List<decimal>)); System.Text.ValueStringBuilder builder15 = new System.Text.ValueStringBuilder(4, 2); builder15.AppendFormatted("System.Collections.Generic.List`1"); builder15.AppendLiteral("[["); builder15.AppendFormatted("System.DateTime"); builder15.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder15), typeof(List<DateTime>)); System.Text.ValueStringBuilder builder16 = new System.Text.ValueStringBuilder(4, 2); builder16.AppendFormatted("System.Collections.Generic.List`1"); builder16.AppendLiteral("[["); builder16.AppendFormatted("System.TimeSpan"); builder16.AppendLiteral("]]"); obj.Add(Types.ToTypeName(ref builder16), typeof(List<TimeSpan>)); System.Text.ValueStringBuilder builder17 = new System.Text.ValueStringBuilder(2, 1); builder17.AppendFormatted("System.Byte"); builder17.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder17), typeof(byte[])); System.Text.ValueStringBuilder builder18 = new System.Text.ValueStringBuilder(2, 1); builder18.AppendFormatted("System.SByte"); builder18.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder18), typeof(sbyte[])); System.Text.ValueStringBuilder builder19 = new System.Text.ValueStringBuilder(2, 1); builder19.AppendFormatted("System.Int16"); builder19.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder19), typeof(short[])); System.Text.ValueStringBuilder builder20 = new System.Text.ValueStringBuilder(2, 1); builder20.AppendFormatted("System.UInt16"); builder20.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder20), typeof(ushort[])); System.Text.ValueStringBuilder builder21 = new System.Text.ValueStringBuilder(2, 1); builder21.AppendFormatted("System.Int32"); builder21.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder21), typeof(int[])); System.Text.ValueStringBuilder builder22 = new System.Text.ValueStringBuilder(2, 1); builder22.AppendFormatted("System.UInt32"); builder22.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder22), typeof(uint[])); System.Text.ValueStringBuilder builder23 = new System.Text.ValueStringBuilder(2, 1); builder23.AppendFormatted("System.Int64"); builder23.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder23), typeof(long[])); System.Text.ValueStringBuilder builder24 = new System.Text.ValueStringBuilder(2, 1); builder24.AppendFormatted("System.UInt64"); builder24.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder24), typeof(ulong[])); System.Text.ValueStringBuilder builder25 = new System.Text.ValueStringBuilder(2, 1); builder25.AppendFormatted("System.Single"); builder25.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder25), typeof(float[])); System.Text.ValueStringBuilder builder26 = new System.Text.ValueStringBuilder(2, 1); builder26.AppendFormatted("System.Double"); builder26.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder26), typeof(double[])); System.Text.ValueStringBuilder builder27 = new System.Text.ValueStringBuilder(2, 1); builder27.AppendFormatted("System.Char"); builder27.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder27), typeof(char[])); System.Text.ValueStringBuilder builder28 = new System.Text.ValueStringBuilder(2, 1); builder28.AppendFormatted("System.Boolean"); builder28.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder28), typeof(bool[])); System.Text.ValueStringBuilder builder29 = new System.Text.ValueStringBuilder(2, 1); builder29.AppendFormatted("System.String"); builder29.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder29), typeof(string[])); System.Text.ValueStringBuilder builder30 = new System.Text.ValueStringBuilder(2, 1); builder30.AppendFormatted("System.Decimal"); builder30.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder30), typeof(decimal[])); System.Text.ValueStringBuilder builder31 = new System.Text.ValueStringBuilder(2, 1); builder31.AppendFormatted("System.DateTime"); builder31.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder31), typeof(DateTime[])); System.Text.ValueStringBuilder builder32 = new System.Text.ValueStringBuilder(2, 1); builder32.AppendFormatted("System.TimeSpan"); builder32.AppendLiteral("[]"); obj.Add(Types.ToTypeName(ref builder32), typeof(TimeSpan[])); System.Text.ValueStringBuilder builder33 = new System.Text.ValueStringBuilder(0, 1); builder33.AppendFormatted("System.Drawing.RectangleF"); obj.Add(Types.ToTypeName(ref builder33), typeof(RectangleF)); System.Text.ValueStringBuilder builder34 = new System.Text.ValueStringBuilder(0, 1); builder34.AppendFormatted("System.Drawing.PointF"); obj.Add(Types.ToTypeName(ref builder34), typeof(PointF)); System.Text.ValueStringBuilder builder35 = new System.Text.ValueStringBuilder(0, 1); builder35.AppendFormatted("System.Drawing.SizeF"); obj.Add(Types.ToTypeName(ref builder35), typeof(SizeF)); System.Text.ValueStringBuilder builder36 = new System.Text.ValueStringBuilder(0, 1); builder36.AppendFormatted("System.Drawing.Rectangle"); obj.Add(Types.ToTypeName(ref builder36), typeof(Rectangle)); System.Text.ValueStringBuilder builder37 = new System.Text.ValueStringBuilder(0, 1); builder37.AppendFormatted("System.Drawing.Point"); obj.Add(Types.ToTypeName(ref builder37), typeof(Point)); System.Text.ValueStringBuilder builder38 = new System.Text.ValueStringBuilder(0, 1); builder38.AppendFormatted("System.Drawing.Size"); obj.Add(Types.ToTypeName(ref builder38), typeof(Size)); System.Text.ValueStringBuilder builder39 = new System.Text.ValueStringBuilder(0, 1); builder39.AppendFormatted("System.Drawing.Color"); obj.Add(Types.ToTypeName(ref builder39), typeof(Color)); System.Text.ValueStringBuilder builder40 = new System.Text.ValueStringBuilder(0, 1); builder40.AppendFormatted("System.Collections.Hashtable"); obj.Add(Types.ToTypeName(ref builder40), typeof(Hashtable)); System.Text.ValueStringBuilder builder41 = new System.Text.ValueStringBuilder(0, 1); builder41.AppendFormatted("System.Collections.ArrayList"); obj.Add(Types.ToTypeName(ref builder41), typeof(ArrayList)); s_knownTypes = obj; } return s_knownTypes.TryGetValue(typeName, out type); } bool INrbfSerializer.TryBindToType(TypeName typeName, [Nullable(2)] [NotNullWhen(true)] out Type type) { return this.TryBindToType(typeName, out type); } public static bool IsFullySupportedType(Type type) { if (!(type == typeof(byte)) && !(type == typeof(sbyte)) && !(type == typeof(short)) && !(type == typeof(ushort)) && !(type == typeof(int)) && !(type == typeof(uint)) && !(type == typeof(long)) && !(type == typeof(ulong)) && !(type == typeof(double)) && !(type == typeof(float)) && !(type == typeof(char)) && !(type == typeof(bool)) && !(type == typeof(string)) && !(type == typeof(decimal)) && !(type == typeof(DateTime)) && !(type == typeof(TimeSpan)) && !(type == typeof(IntPtr)) && !(type == typeof(UIntPtr)) && !(type == typeof(List<byte>)) && !(type == typeof(List<sbyte>)) && !(type == typeof(List<short>)) && !(type == typeof(List<ushort>)) && !(type == typeof(List<int>)) && !(type == typeof(List<uint>)) && !(type == typeof(List<long>)) && !(type == typeof(List<ulong>)) && !(type == typeof(List<float>)) && !(type == typeof(List<double>)) && !(type == typeof(List<char>)) && !(type == typeof(List<bool>)) && !(type == typeof(List<string>)) && !(type == typeof(List<decimal>)) && !(type == typeof(List<DateTime>)) && !(type == typeof(List<TimeSpan>)) && !(type == typeof(byte[])) && !(type == typeof(sbyte[])) && !(type == typeof(short[])) && !(type == typeof(ushort[])) && !(type == typeof(int[])) && !(type == typeof(uint[])) && !(type == typeof(long[])) && !(type == typeof(ulong[])) && !(type == typeof(float[])) && !(type == typeof(double[])) && !(type == typeof(char[])) && !(type == typeof(bool[])) && !(type == typeof(string[])) && !(type == typeof(decimal[])) && !(type == typeof(DateTime[])) && !(type == typeof(TimeSpan[])) && !(type == typeof(RectangleF)) && !(type == typeof(PointF)) && !(type == typeof(SizeF)) && !(type == typeof(Rectangle)) && !(type == typeof(Point)) && !(type == typeof(Size))) return type == typeof(Color); return true; } bool INrbfSerializer.IsFullySupportedType(Type type) { return this.IsFullySupportedType(type); } } }