Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit a879083

Browse files
committed
Create CompositeKeyIssue.cs
1 parent 9713ca9 commit a879083

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using NUnit.Framework;
4+
5+
namespace ServiceStack.Text.Tests.Issues
6+
{
7+
public class Container<TKey>
8+
{
9+
public IDictionary<TKey, string[]> Data { get; set; } = new Dictionary<TKey, string[]>();
10+
}
11+
12+
public struct CompositeKey
13+
{
14+
public string Name { get; set; }
15+
public bool Value { get; set; }
16+
public CompositeKey(string name, bool value)
17+
{
18+
Name = name;
19+
Value = value;
20+
}
21+
22+
public CompositeKey(string jsonKey)
23+
{
24+
Name = jsonKey.LeftPart(':');
25+
Value = jsonKey.RightPart(':').ConvertTo<bool>();
26+
}
27+
28+
public bool Equals(CompositeKey other) =>
29+
Name == other.Name && Value == other.Value;
30+
31+
public override bool Equals(object obj) =>
32+
obj is CompositeKey other && Equals(other);
33+
34+
public override int GetHashCode()
35+
{
36+
unchecked
37+
{
38+
return ((Name != null ? Name.GetHashCode() : 0) * 397)
39+
^ Value.GetHashCode();
40+
}
41+
}
42+
43+
public override string ToString() => $"{Name}:{Value}";
44+
}
45+
46+
47+
public class CompositeKeyIssue
48+
{
49+
[Test]
50+
public void Can_serialize_CompositeKey()
51+
{
52+
var dto = new Container<CompositeKey>
53+
{
54+
Data = new Dictionary<CompositeKey, string[]>
55+
{
56+
{ new CompositeKey("abc", false), new[] { "1","2","3"} },
57+
{ new CompositeKey("bdf", true), new[] { "b","c","d"} },
58+
{ new CompositeKey("ceg", false), new[] { "4","5","6"} },
59+
}
60+
};
61+
62+
var serialized = JsonSerializer.SerializeToString(dto);
63+
var fromJson = JsonSerializer.DeserializeFromString<Container<CompositeKey>>(serialized);
64+
65+
Assert.That(fromJson.Data.Count, Is.EqualTo(dto.Data.Count));
66+
Assert.That(fromJson.Data, Is.EqualTo(dto.Data));
67+
}
68+
}
69+
}

0 commit comments

Comments
 (0)