- Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathTagsSerializer.cs
More file actions
Latest commit
108 lines (95 loc) · 3.38 KB
/
Copy pathTagsSerializer.cs
File metadata and controls
108 lines (95 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceSharpQuant.ObjectStore
{
/// <summary>
/// REMARK: The reason we want to serialize tags into text is that they can be read in a
/// DB field with another API as opposed to the binary object data
/// </summary>
publicinterfaceITagsSerializer
{
IDictionary<string,string>Deserialize(stringraw);
stringSerialize(IDictionary<string,string>info);
}
/// <summary>
/// Simplistic but fast INI-like serializer. No special characters allowed.
/// </summary>
publicclassINITagsSerializer:ITagsSerializer
{
privatestring_valueSeparator="]=[";
privatechar_itemSeparator='\n';
publicIDictionary<string,string>Deserialize(stringraw)
{
vardict=newDictionary<string,string>();
if(string.IsNullOrEmpty(raw))
returndict;
string[]items=raw.Split(_itemSeparator);
foreach(variteminitems)
{
intpos=item.IndexOf(_valueSeparator);
stringkey=item.Substring(1,pos-1);
stringvalue=item.Substring(pos+3,item.Length-pos-4);
dict.Add(key,value);
}
returndict;
}
publicstringSerialize(IDictionary<string,string>info)
{
StringBuildersb=newStringBuilder();
foreach(varitemininfo)
{
sb.Append("[");
sb.Append(item.Key);
sb.Append(_valueSeparator);
sb.Append(item.Value);
sb.Append("]");
sb.Append(_itemSeparator);
}
if(sb.Length>1)returnsb.ToString(0,sb.Length-1);
returnstring.Empty;
}
}
/// <summary>
/// Simplistic but fast JSON-like serializer. No special characters allowed.
/// </summary>
publicclassJSONTagsSerializer:ITagsSerializer
{
publicIDictionary<string,string>Deserialize(stringraw)
{
vardict=newDictionary<string,string>();
if(string.IsNullOrEmpty(raw))
returndict;
varlines=raw.Split(',');
intn=lines.Length;
for(inti=0;i<n;i++)
{
varvt=lines[i].Split(':');
if(i==0)
vt[0]=vt[0].Substring(1);//remove {
if(i==n-1)
vt[1]=vt[1].Substring(0,vt[1].Length-1);//remove }
dict.Add(vt[0].Substring(1,vt[0].Length-2),vt[1].Substring(1,vt[1].Length-2));//remove "
}
returndict;
}
publicstringSerialize(IDictionary<string,string>info)
{
StringBuildersb=newStringBuilder();
sb.Append("{");
foreach(varitemininfo)
{
sb.Append("\"");
sb.Append(item.Key);
sb.Append("\":\"");
sb.Append(item.Value);
sb.Append("\",");
}
if(sb.Length>1)sb.Length=sb.Length-1;//remove last comma
sb.Append("}");
if(sb.Length>1)returnsb.ToString(0,sb.Length-1);
returnstring.Empty;
}
}
}