Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ public static string ToSnakeCase(string s)
sb.Append(char.ToLowerInvariant(c));
else if (char.IsUpper(s[i - 1])) // WriteIO => write_io
sb.Append(char.ToLowerInvariant(c));
else if (s[i - 1] == '_') // User_Id => user_id
sb.Append(char.ToLowerInvariant(c));
else
{
sb.Append("_");
Expand Down
25 changes: 25 additions & 0 deletions tests/Elastic.CommonSchema.Tests/Serializes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,31 @@ public void SerializesSomethingToString()
deserialized.Log.Level.Should().Be("debug");
}

[Fact]
public void SerializesMetadataPropertiesToSnakeCase()
{
var b = new EcsDocument
{
Metadata = new Dictionary<string, object>
{
["MessageTemplate"] = "some-template",
["WriteIO"] = "some-io",
["User_Id"] = 1,
["eventId"] = "some-id",
["rule"] = "some-rule",
}
};

var serialized = b.Serialize();
var deserialized = EcsSerializerFactory<EcsDocument>.Deserialize(serialized);

deserialized.Metadata.Should().ContainKey("message_template");
deserialized.Metadata.Should().ContainKey("write_io");
deserialized.Metadata.Should().ContainKey("user_id");
deserialized.Metadata.Should().ContainKey("event_id");
deserialized.Metadata.Should().ContainKey("rule");
}

public class SubclassedDocument : EcsDocument
{
[DataMember(Name = "agent2")]
Expand Down