public ListStringCollection Serdes(ListStringCollection existing, AssetInfo info, AssetMapping mapping, ISerializer s, IJsonUtil jsonUtil) { if (info == null) { throw new ArgumentNullException(nameof(info)); } if (mapping == null) { throw new ArgumentNullException(nameof(mapping)); } if (s.IsWriting()) { return(existing); } var predicate = info.AssetId switch { { } x when x == Words1 => (Func <int, bool>)(x => x <= 500), { } x when x == Words2 => (Func <int, bool>)(x => x > 500 && x <= 1000), { } x when x == Words3 => (Func <int, bool>)(x => x > 1000), _ => throw new ArgumentOutOfRangeException(nameof(info)) }; var assets = Resolve <IAssetManager>(); var ids = mapping.EnumerateAssetsOfType(AssetType.Word) .Where(x => predicate(x.Id)) // make sure TextId->StringId resolution won't happen // and get stuck in infinite recursion .Select(x => new StringId(x, 0)) .ToArray(); var language = info.Get(AssetProperty.Language, Base.Language.English); var dict = ids.ToDictionary( x => x.Id.Id, x => assets.LoadString(x, language)); var list = new ListStringCollection(); for (int i = 0; i < 1500; i++) { list.Add(null); } foreach (var kvp in dict) { list[kvp.Key - 1] = kvp.Value; } return(list); }
public MultiLanguageStringDictionary Serdes(MultiLanguageStringDictionary existing, AssetInfo info, AssetMapping mapping, ISerializer s, IJsonUtil jsonUtil) { if (mapping == null) { throw new ArgumentNullException(nameof(mapping)); } if (s.IsWriting()) { return(existing); } var assets = Resolve <IAssetManager>(); var ids = mapping.EnumerateAssetsOfType(AssetType.ItemName) // make sure TextId->StringId resolution won't happen // and get stuck in infinite recursion .Select(x => new StringId(x, 0)) .ToArray(); var german = ids.ToDictionary(x => x.Id.Id, x => assets.LoadString(x, Base.Language.German)); var english = ids.ToDictionary(x => x.Id.Id, x => assets.LoadString(x, Base.Language.English)); var french = ids.ToDictionary(x => x.Id.Id, x => assets.LoadString(x, Base.Language.French));