Add LocalizedString

This commit is contained in:
Wojtek Figat
2021-04-19 16:24:14 +02:00
parent f1b82b788b
commit 983190b9a0
5 changed files with 354 additions and 0 deletions

View File

@@ -219,6 +219,75 @@ namespace FlaxEngine.Json
public override bool CanWriteDiff => true;
}
/// <summary>
/// Serialize LocalizedString as inlined text is not using localization (Id member is empty).
/// </summary>
/// <seealso cref="Newtonsoft.Json.JsonConverter" />
internal class LocalizedStringConverter : JsonConverter
{
/// <inheritdoc />
public override void WriteJson(JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
{
var str = (LocalizedString)value;
if (string.IsNullOrEmpty(str.Id))
{
writer.WriteValue(str.Value);
}
else
{
writer.WriteStartObject();
writer.WritePropertyName("Id");
writer.WriteValue(str.Id);
writer.WritePropertyName("Value");
writer.WriteValue(str.Value);
writer.WriteEndObject();
}
}
/// <inheritdoc />
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
{
var str = existingValue as LocalizedString ?? new LocalizedString();
if (reader.TokenType == JsonToken.String)
{
str.Id = null;
str.Value = (string)reader.Value;
}
else if (reader.TokenType == JsonToken.StartObject)
{
while (reader.Read())
{
switch (reader.TokenType)
{
case JsonToken.PropertyName:
{
var propertyName = (string)reader.Value;
switch (propertyName)
{
case "Id":
str.Id = reader.ReadAsString();
break;
case "Value":
str.Value = reader.ReadAsString();
break;
}
break;
}
case JsonToken.Comment: break;
default: return str;
}
}
}
return str;
}
/// <inheritdoc />
public override bool CanConvert(Type objectType)
{
return objectType == typeof(LocalizedString);
}
}
/*
/// <summary>
/// Serialize Guid values using `N` format