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
109
|
// Copyright (c) All contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Buffers;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MessagePack.Formatters;
using MessagePack.Resolvers;
using Xunit;
namespace MessagePack.Tests
{
public class MessagePackFormatterPerFieldTest
{
[MessagePackObject]
public class MyClass
{
[Key(0)]
[MessagePackFormatter(typeof(Int_x10Formatter))]
public int MyProperty1 { get; set; }
[Key(1)]
public int MyProperty2 { get; set; }
[Key(2)]
[MessagePackFormatter(typeof(String_x2Formatter))]
public string MyProperty3 { get; set; }
[Key(3)]
public string MyProperty4 { get; set; }
}
[MessagePackObject]
public struct MyStruct
{
[Key(0)]
[MessagePackFormatter(typeof(Int_x10Formatter))]
public int MyProperty1 { get; set; }
[Key(1)]
public int MyProperty2 { get; set; }
[Key(2)]
[MessagePackFormatter(typeof(String_x2Formatter))]
public string MyProperty3 { get; set; }
[Key(3)]
public string MyProperty4 { get; set; }
}
public class Int_x10Formatter : IMessagePackFormatter<int>
{
public int Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
{
return reader.ReadInt32() * 10;
}
public void Serialize(ref MessagePackWriter writer, int value, MessagePackSerializerOptions options)
{
writer.Write(value * 10);
}
}
public class String_x2Formatter : IMessagePackFormatter<string>
{
public string Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
{
var s = reader.ReadString();
return s + s;
}
public void Serialize(ref MessagePackWriter writer, string value, MessagePackSerializerOptions options)
{
writer.Write(value + value);
}
}
[Fact]
public void FooBar()
{
{
var bin = MessagePackSerializer.Serialize(new MyClass { MyProperty1 = 100, MyProperty2 = 9, MyProperty3 = "foo", MyProperty4 = "bar" });
var json = MessagePackSerializer.ConvertToJson(bin);
json.Is("[1000,9,\"foofoo\",\"bar\"]");
MyClass r2 = MessagePackSerializer.Deserialize<MyClass>(bin);
r2.MyProperty1.Is(10000);
r2.MyProperty2.Is(9);
r2.MyProperty3.Is("foofoofoofoo");
r2.MyProperty4.Is("bar");
}
{
var bin = MessagePackSerializer.Serialize(new MyStruct { MyProperty1 = 100, MyProperty2 = 9, MyProperty3 = "foo", MyProperty4 = "bar" });
var json = MessagePackSerializer.ConvertToJson(bin);
json.Is("[1000,9,\"foofoo\",\"bar\"]");
MyStruct r2 = MessagePackSerializer.Deserialize<MyStruct>(bin);
r2.MyProperty1.Is(10000);
r2.MyProperty2.Is(9);
r2.MyProperty3.Is("foofoofoofoo");
r2.MyProperty4.Is("bar");
}
}
}
}
|