diff --git a/ParadoxSaveParser.Lib/ParsedValueJsonContext.cs b/ParadoxSaveParser.Lib/ParsedValueJsonContext.cs index 5fff6fa..bbef300 100644 --- a/ParadoxSaveParser.Lib/ParsedValueJsonContext.cs +++ b/ParadoxSaveParser.Lib/ParsedValueJsonContext.cs @@ -8,6 +8,7 @@ namespace ParadoxSaveParser.Lib; [JsonSerializable(typeof(string))] [JsonSerializable(typeof(long))] [JsonSerializable(typeof(double))] +[JsonSerializable(typeof(bool))] public partial class ParsedValueJsonContext : JsonSerializerContext { } \ No newline at end of file diff --git a/ParadoxSaveParser.Lib/SaveParserEU4.cs b/ParadoxSaveParser.Lib/SaveParserEU4.cs index 8cee521..d6e07c7 100644 --- a/ParadoxSaveParser.Lib/SaveParserEU4.cs +++ b/ParadoxSaveParser.Lib/SaveParserEU4.cs @@ -154,19 +154,29 @@ public class SaveParserEU4 switch (tok.type) { case TokenType.StringOrNumber: - // string values can be empty - if(tok.value!.Length == 0) - return string.Empty; - - string tokStr = tok.value.ToString(); - _stringBuilderPool.Return(tok.value); - if (tokStr[0] != '-' && !char.IsDigit(tokStr[0])) + try + { + // string values can be empty + if (tok.value!.Length == 0) + return string.Empty; + if (tok.value.Equals("yes")) + return true; + if (tok.value.Equals("no")) + return false; + + string tokStr = tok.value.ToString(); + if (tokStr[0] != '-' && !char.IsDigit(tokStr[0])) + return tokStr; + if (tokStr.Contains('.') && double.TryParse(tokStr, out double d)) + return d; + if (long.TryParse(tokStr, out long l)) + return l; return tokStr; - if (tokStr.Contains('.') && double.TryParse(tokStr, out double d)) - return d; - if (long.TryParse(tokStr, out long l)) - return l; - return tokStr; + } + finally + { + _stringBuilderPool.Return(tok.value!); + } case TokenType.BracketOpen: object obj = ParseListOrDict(); return obj; diff --git a/ParadoxSaveParser.WebAPI/Protobuf/ParsedData.proto b/ParadoxSaveParser.WebAPI/Protobuf/ParsedData.proto index 2cc00a5..3d2c30a 100644 --- a/ParadoxSaveParser.WebAPI/Protobuf/ParsedData.proto +++ b/ParadoxSaveParser.WebAPI/Protobuf/ParsedData.proto @@ -3,11 +3,12 @@ option csharp_namespace = "ParadoxSaveParser.WebAPI.MyProtobuf"; message Item { oneof value { - int64 i64 = 1; - double f64 = 2; - string str = 3; - ItemList list = 4; - ItemListMap map = 5; + bool b = 1; + int64 i64 = 2; + double f64 = 3; + string str = 4; + ItemList list = 5; + ItemListMap map = 6; } }