Fauna v10 .NET/C# Driver 0.2.0-beta
 
Loading...
Searching...
No Matches
ListSerializer.cs
Go to the documentation of this file.
1using System.Collections;
2using Fauna.Mapping;
3
4namespace Fauna.Serialization;
5
6internal class ListSerializer<T> : BaseSerializer<List<T>>
7{
8 private readonly ISerializer<T> _elemSerializer;
9
10 public ListSerializer(ISerializer<T> elemSerializer)
11 {
12 _elemSerializer = elemSerializer;
13 }
14
15 public override List<T> Deserialize(MappingContext context, ref Utf8FaunaReader reader)
16 {
17 if (reader.CurrentTokenType == TokenType.StartPage)
18 throw new SerializationException(
19 $"Unexpected token while deserializing into {typeof(List<T>)}: {reader.CurrentTokenType}");
20
21 var wrapInList = reader.CurrentTokenType != TokenType.StartArray;
22
23 var lst = new List<T>();
24
25 if (wrapInList)
26 {
27 lst.Add(_elemSerializer.Deserialize(context, ref reader));
28 }
29 else
30 {
31 while (reader.Read() && reader.CurrentTokenType != TokenType.EndArray)
32 {
33 lst.Add(_elemSerializer.Deserialize(context, ref reader));
34 }
35 }
36
37 return lst;
38 }
39
40 public override void Serialize(MappingContext ctx, Utf8FaunaWriter w, object? o)
41 {
42 if (o is null)
43 {
44 w.WriteNullValue();
45 return;
46 }
47
48 if (o.GetType().IsGenericType &&
49 o.GetType().GetGenericTypeDefinition() == typeof(List<>) ||
50 o.GetType().GetGenericTypeDefinition() == typeof(IEnumerable))
51 {
52 w.WriteStartArray();
53 foreach (object? elem in (IEnumerable)o)
54 {
55 _elemSerializer.Serialize(ctx, w, elem);
56 }
57 w.WriteEndArray();
58 return;
59 }
60
61 throw new SerializationException(UnsupportedSerializationTypeMessage(o.GetType()));
62 }
63}
A class representing the mapping context to be used during serialization and deserialization.
TokenType
Enumerates the types of tokens used in Fauna serialization.
Definition TokenType.cs:7