Example Outputs

September 20, 2018 ยท View on GitHub

So as the serializers within here are interchangable here is an extract from the tests which shows the same object being spat out through 5 different serializers.

Main Take Away

  • Binary will be the most efficient, but is not human readable (about 1/4 the size of JSON and 1/9 the size of XML)

  • Although Json/Xml/Yaml is larger in file size, they are more compatible and human readable

  • Output is generally consistent across the board other than some rounding may occur on long floating point numbers depending on the serializer

Original C# Object

This object is used within tests to verify behaviour works as expected.
public static ComplexModel GeneratePopulatedModel()
{
    var a = new ComplexModel();
    a.TestValue = "WOW";
    a.NonPersisted = 100;
    a.Stuff.Add("woop");
    a.Stuff.Add("poow");

    a.NestedValue = new B
    {
        IntValue = 0,
        StringValue = "Hello",
        NestedArray = new[] { new C { FloatValue = 2.43f } }
    };

    a.NestedArray = new B[2];
    a.NestedArray[0] = new B
    {
        IntValue = 20,
        StringValue = "There",
        NestedArray = new[] { new C { FloatValue = 3.5f } }
    };

    a.NestedArray[1] = new B
    {
        IntValue = 30,
        StringValue = "Sir",
        NestedArray = new[]
        {
             new C { FloatValue = 4.1f },
             new C { FloatValue = 5.2f }
        }
    };

    a.AllTypes = new D
    {
        ByteValue = byte.MaxValue,
        ShortValue = short.MaxValue,
        IntValue = int.MaxValue,
        LongValue = long.MaxValue,
        GuidValue = Guid.NewGuid(),
        DateTimeValue = DateTime.MaxValue,
        Vector2Value = Vector2.one,
        Vector3Value = Vector3.one,
        Vector4Value = Vector4.one,
        QuaternionValue = new Quaternion(1.0f, 1.0f, 1.0f, 1.0f),
        SomeType = SomeTypes.Known
    };

    a.SimpleDictionary.Add("key1", "some-value");
    a.SimpleDictionary.Add("key2", "some-other-value");

    a.ComplexDictionary.Add(new E { IntValue = 10 }, new C { FloatValue = 32.2f });

    return a;
}

Binary

About 270 bytes in size when in a file
15-41-73-73-65-74-73-2E-54-65-73-74-73-2E-45-64-69-74-6F-72-2E-41-03-57-4F-57-05-48-65-6C-6C-6F-00-00-00-00-01-00-00-00-1F-85-1B-40-02-00-00-00-05-54-68-65-72-65-14-00-00-00-01-00-00-00-00-00-60-40-03-53-69-72-1E-00-00-00-02-00-00-00-33-33-83-40-66-66-A6-40-02-00-00-00-04-77-6F-6F-70-04-70-6F-6F-77-FF-FF-7F-FF-FF-FF-7F-FF-FF-FF-FF-FF-FF-FF-7F-24-33-64-38-33-35-61-37-39-2D-62-61-33-33-2D-34-35-63-32-2D-38-30-32-65-2D-66-37-65-39-38-32-31-65-61-36-38-34-FF-3F-37-F4-75-28-CA-2B-00-00-80-3F-00-00-80-3F-00-00-80-3F-00-00-80-3F-00-00-80-3F-00-00-80-3F-00-00-80-3F-00-00-80-3F-00-00-80-3F-00-00-80-3F-00-00-80-3F-00-00-80-3F-00-00-80-3F-01-00-00-00-02-00-00-00-04-6B-65-79-31-0A-73-6F-6D-65-2D-76-61-6C-75-65-04-6B-65-79-32-10-73-6F-6D-65-2D-6F-74-68-65-72-2D-76-61-6C-75-65-01-00-00-00-0A-00-00-00-CD-CC-00-42

Xml

About 2.4kb when in a file
<Container>
  <TestValue>WOW</TestValue>
  <NestedValue>
    <StringValue>Hello</StringValue>
    <IntValue>0</IntValue>
    <NestedArray Count="1">
      <CollectionElement>
        <FloatValue>2.43</FloatValue>
      </CollectionElement>
    </NestedArray>
  </NestedValue>
  <NestedArray Count="2">
    <CollectionElement>
      <StringValue>There</StringValue>
      <IntValue>20</IntValue>
      <NestedArray Count="1">
        <CollectionElement>
          <FloatValue>3.5</FloatValue>
        </CollectionElement>
      </NestedArray>
    </CollectionElement>
    <CollectionElement>
      <StringValue>Sir</StringValue>
      <IntValue>30</IntValue>
      <NestedArray Count="2">
        <CollectionElement>
          <FloatValue>4.1</FloatValue>
        </CollectionElement>
        <CollectionElement>
          <FloatValue>5.2</FloatValue>
        </CollectionElement>
      </NestedArray>
    </CollectionElement>
  </NestedArray>
  <Stuff Count="2">
    <CollectionElement>woop</CollectionElement>
    <CollectionElement>poow</CollectionElement>
  </Stuff>
  <AllTypes>
    <ByteValue>255</ByteValue>
    <ShortValue>32767</ShortValue>
    <IntValue>2147483647</IntValue>
    <LongValue>9223372036854775807</LongValue>
    <GuidValue>216495ac-1e4e-412c-b6d7-071539446b76</GuidValue>
    <DateTimeValue>3155378975999999999</DateTimeValue>
    <Vector2Value>
      <x>1</x>
      <y>1</y>
    </Vector2Value>
    <Vector3Value>
      <x>1</x>
      <y>1</y>
      <z>1</z>
    </Vector3Value>
    <Vector4Value>
      <x>1</x>
      <y>1</y>
      <z>1</z>
      <w>1</w>
    </Vector4Value>
    <QuaternionValue>
      <x>1</x>
      <y>1</y>
      <z>1</z>
      <w>1</w>
    </QuaternionValue>
    <SomeType>Known</SomeType>
  </AllTypes>
  <SimpleDictionary Count="2">
    <KeyValuePair>
      <Key>key1</Key>
      <Value>some-value</Value>
    </KeyValuePair>
    <KeyValuePair>
      <Key>key2</Key>
      <Value>some-other-value</Value>
    </KeyValuePair>
  </SimpleDictionary>
  <ComplexDictionary Count="1">
    <KeyValuePair>
      <Key>
        <IntValue>10</IntValue>
      </Key>
      <Value>
        <FloatValue>32.2</FloatValue>
      </Value>
    </KeyValuePair>
  </ComplexDictionary>
  <Type>Assets.Tests.Editor.A</Type>
</Container>

JSON

About 1kb in size when in a file
{
   "TestValue":"WOW",
   "NestedValue":{
      "StringValue":"Hello",
      "IntValue":0,
      "NestedArray":[
         {
            "FloatValue":2.4300000667572
         }
      ]
   },
   "NestedArray":[
      {
         "StringValue":"There",
         "IntValue":20,
         "NestedArray":[
            {
               "FloatValue":3.5
            }
         ]
      },
      {
         "StringValue":"Sir",
         "IntValue":30,
         "NestedArray":[
            {
               "FloatValue":4.09999990463257
            },
            {
               "FloatValue":5.19999980926514
            }
         ]
      }
   ],
   "Stuff":[
      "woop",
      "poow"
   ],
   "AllTypes":{
      "ByteValue":255,
      "ShortValue":32767,
      "IntValue":2147483647,
      "LongValue":"9223372036854775807",
      "GuidValue":"9cd0c2ea-dee4-4e0c-b703-bce71591e0c6",
      "DateTimeValue":"3155378975999999999",
      "Vector2Value":{
         "x":1,
         "y":1
      },
      "Vector3Value":{
         "x":1,
         "y":1,
         "z":1
      },
      "Vector4Value":{
         "x":1,
         "y":1,
         "z":1,
         "w":1
      },
      "QuaternionValue":{
         "x":1,
         "y":1,
         "z":1,
         "w":1
      },
      "SomeType":"Known"
   },
   "SimpleDictionary":[
      {
         "Key":"key1",
         "Value":"some-value"
      },
      {
         "Key":"key2",
         "Value":"some-other-value"
      }
   ],
   "ComplexDictionary":[
      {
         "Key":{
            "IntValue":10
         },
         "Value":{
            "FloatValue":32.2000007629395
         }
      }
   ],
   "Type":"Assets.Tests.Editor.A"
}

BSON

About 850 bytes in size when in a file
55-03-00-00-02-54-65-73-74-56-61-6C-75-65-00-04-00-00-00-57-4F-57-00-10-4E-6F-6E-50-65-72-73-69-73-74-65-64-00-64-00-00-00-03-4E-65-73-74-65-64-56-61-6C-75-65-00-58-00-00-00-02-53-74-72-69-6E-67-56-61-6C-75-65-00-06-00-00-00-48-65-6C-6C-6F-00-10-49-6E-74-56-61-6C-75-65-00-00-00-00-00-04-4E-65-73-74-65-64-41-72-72-61-79-00-21-00-00-00-03-30-00-19-00-00-00-01-46-6C-6F-61-74-56-61-6C-75-65-00-00-00-00-E0-A3-70-03-40-00-00-00-04-4E-65-73-74-65-64-41-72-72-61-79-00-D5-00-00-00-03-30-00-58-00-00-00-02-53-74-72-69-6E-67-56-61-6C-75-65-00-06-00-00-00-54-68-65-72-65-00-10-49-6E-74-56-61-6C-75-65-00-14-00-00-00-04-4E-65-73-74-65-64-41-72-72-61-79-00-21-00-00-00-03-30-00-19-00-00-00-01-46-6C-6F-61-74-56-61-6C-75-65-00-00-00-00-00-00-00-0C-40-00-00-00-03-31-00-72-00-00-00-02-53-74-72-69-6E-67-56-61-6C-75-65-00-04-00-00-00-53-69-72-00-10-49-6E-74-56-61-6C-75-65-00-1E-00-00-00-04-4E-65-73-74-65-64-41-72-72-61-79-00-3D-00-00-00-03-30-00-19-00-00-00-01-46-6C-6F-61-74-56-61-6C-75-65-00-00-00-00-60-66-66-10-40-00-03-31-00-19-00-00-00-01-46-6C-6F-61-74-56-61-6C-75-65-00-00-00-00-C0-CC-CC-14-40-00-00-00-00-04-53-74-75-66-66-00-1D-00-00-00-02-30-00-05-00-00-00-77-6F-6F-70-00-02-31-00-05-00-00-00-70-6F-6F-77-00-00-03-41-6C-6C-54-79-70-65-73-00-BC-00-00-00-12-42-79-74-65-56-61-6C-75-65-00-FF-00-00-00-00-00-00-00-12-53-68-6F-72-74-56-61-6C-75-65-00-FF-7F-00-00-00-00-00-00-10-49-6E-74-56-61-6C-75-65-00-FF-FF-FF-7F-12-4C-6F-6E-67-56-61-6C-75-65-00-FF-FF-FF-FF-FF-FF-FF-7F-05-47-75-69-64-56-61-6C-75-65-00-10-00-00-00-04-3A-F0-63-47-60-DB-12-49-B7-06-10-AF-58-AE-2C-A2-02-44-61-74-65-54-69-6D-65-56-61-6C-75-65-00-14-00-00-00-33-31-35-35-33-37-38-39-37-35-39-39-39-39-39-39-39-39-39-00-02-54-69-6D-65-53-70-61-6E-56-61-6C-75-65-00-03-00-00-00-31-30-00-12-53-6F-6D-65-54-79-70-65-00-01-00-00-00-00-00-00-00-00-04-53-69-6D-70-6C-65-44-69-63-74-69-6F-6E-61-72-79-00-63-00-00-00-03-30-00-29-00-00-00-02-4B-65-79-00-05-00-00-00-6B-65-79-31-00-02-56-61-6C-75-65-00-0B-00-00-00-73-6F-6D-65-2D-76-61-6C-75-65-00-00-03-31-00-2F-00-00-00-02-4B-65-79-00-05-00-00-00-6B-65-79-32-00-02-56-61-6C-75-65-00-11-00-00-00-73-6F-6D-65-2D-6F-74-68-65-72-2D-76-61-6C-75-65-00-00-00-04-43-6F-6D-70-6C-65-78-44-69-63-74-69-6F-6E-61-72-79-00-45-00-00-00-03-30-00-3D-00-00-00-03-4B-65-79-00-13-00-00-00-10-49-6E-74-56-61-6C-75-65-00-0A-00-00-00-00-03-56-61-6C-75-65-00-19-00-00-00-01-46-6C-6F-61-74-56-61-6C-75-65-00-00-00-00-A0-99-19-40-40-00-00-00-02-54-79-70-65-00-23-00-00-00-4C-61-7A-79-44-61-74-61-2E-54-65-73-74-73-2E-4D-6F-64-65-6C-73-2E-43-6F-6D-70-6C-65-78-4D-6F-64-65-6C-00-00

Yaml

About 850 bytes in size when in a file
TestValue: WOW
NonPersisted: 100
NestedValue:
  StringValue: Hello
  IntValue: 0
  NestedArray:
  - FloatValue: 2.43000007
NestedArray:
- StringValue: There
  IntValue: 20
  NestedArray:
  - FloatValue: 3.5
- StringValue: Sir
  IntValue: 30
  NestedArray:
  - FloatValue: 4.0999999
  - FloatValue: 5.19999981
Stuff:
- woop
- poow
AllTypes:
  ByteValue: 255
  ShortValue: 32767
  IntValue: 2147483647
  LongValue: 9223372036854775807
  GuidValue: 1ebac5c9-ca69-4eba-9709-3b3fd19b213d
  DateTimeValue: 3155378975999999999
  TimeSpanValue: 10
  SomeType: Known
SimpleDictionary:
- Key: key1
  Value: some-value
- Key: key2
  Value: some-other-value
ComplexDictionary:
- Key:
    IntValue: 10
  Value:
    FloatValue: 32.2000008
Type: LazyData.Tests.Models.ComplexModel