The easiest serialization method for a simple data structure

I have a simple data structure that I want to serialize without adding too much overhead. Which approach do you think is best in terms of data size?

  • Custom serialization / deserialization using delimiters like "#" or another character. I am 100% not in my data.
  • XmlSerialization
  • Json
  • Other

I use C # custom serialization as a delimiter because I'm 100% sure that I don't have this character in my data.

Example data structure:

string        Title       
int           ChapterIndex
List<String>  Paragraphs

I have a list of objects above

  • No optimization (tabs and spaces)

JSON:

[
 {
    "title": "some title 0",
    "chapterIndex": 0,
    "paragraphs": ["p1", "p2", "p3", "p4"]
 },
 {
    "title": "some title 1",
    "chapterIndex": 1,
    "paragraphs": ["p1chap1", "p2chap1", "p3chap1", "p4chap1"]
 }
]

XML:

<RootTag>
    <item title="some title 0" chapterIndex="0">
        <paragraph>p1</paragraph>
        <paragraph>p2</paragraph>
        <paragraph>p3</paragraph>
        <paragraph>p4</paragraph>
    </item>
    <item title="some title 1" chapterIndex="1">
        <paragraph>p1chap1</paragraph>
        <paragraph>p2chap1</paragraph>
        <paragraph>p3chap1</paragraph>
        <paragraph>p4chap1</paragraph>
    </item>
</RootTag>
  1. Optimized (no extra characters)

JSON:

[{"title":"some title 0","chapterIndex":0,"paragraphs":["p1","p2","p3","p4"]},{"title":"some title 1","chapterIndex":1,"paragraphs":["p1chap1","p2chap1","p3chap1","p4chap1"]}]

XML:

<RootTag><item title="some title 0" chapterIndex="0"><paragraph>p1</paragraph><paragraph>p2</paragraph><paragraph>p3</paragraph><paragraph>p4</paragraph></item><item title="some title 1" chapterIndex="1"><paragraph>p1chap1</paragraph><paragraph>p2chap1</paragraph><paragraph>p3chap1</paragraph><paragraph>p4chap1</paragraph></item></RootTag>

Customs:

some title 0##0##p1#p2#p3#p4###some title 1##1##p1chap1#p2chap1#p3chap1#p4chap1###and_so_on

User optimization:

some title 0§0§p1#p2#p3#p4¤some title 1§1§p1chap1#p2chap1#p3chap1#p4chap1¤and_so_on

having

  • ¤ as a separator of list items
  • § as properties inside the element separator
  • #

UPDATE: , /, chapternumber/lyricId .

+4
4

, , .

, :

  • ,

, .

?
, -.

+3

. , . " " (-, ).

/, BinaryFormatter/protobuf , , , 5 10000, , , 2-4 .

Json xml, , , "" ( 10000 10000) ( ), , -, .

... protobuf? , , (protobuf) "", Google, , :-) . , , DateTime float . 100 , , ? .

Protobuf:

[ProtoContract]
public class MyObject
{
    [ProtoMember(1)]
    public string title { get; set; }
    [ProtoMember(2)]
    public int chapterIndex { get; set; }
    [ProtoMember(3)]
    public List<String> paragraphs { get; set; }
}

var myo = new[] 
{ 
    new MyObject
    {
        title = "some title 0",
        chapterIndex = 0,
        paragraphs = new List<string> { "p1", "p2", "p3", "p4" }
    }, 
    new MyObject
    {
        title = "some title 1",
        chapterIndex = 1,
        paragraphs = new List<string> { "p1chap1", "p2chap1", "p3chap1", "p4chap1" }
    }, 
};

byte[] bytes;

using (var ms = new MemoryStream())
{
    Serializer.Serialize(ms, myo);
    bytes = ms.ToArray();
}

using (var ms = new MemoryStream(bytes))
{
    MyObject[] myo2 = Serializer.Deserialize<MyObject[]>(ms);
}

byte[] 86, , (81). , , . , protobuf -, , , .

+2

, JSON , . : http://json.org/example JSON XML.

JSON Parser .

0

google proto-buf , .

0

All Articles