Вы можете добавить словарь как
[XmlRoot("DialogCollection")]
public class DialogContainer
{
[XmlArray("Dialogs")]
[XmlArrayItem("Dialog")]
public List<Dialog> dialogs = new List<Dialog>();
public Dictionary<string, string> IdToText = new Dictionary<string, string>();
public static DialogContainer Load(string path)
{
TextAsset _xml = Resources.Load<TextAsset>(path);
XmlSerializer serializer = new XmlSerializer(typeof(DialogContainer));
// use a better variable name since "dialogs" is also a field of it
DialogContainer dialogContainer;
// use "using" for disposables
using(StringReader reader = new StringReader(_xml.text))
{
dialogContainer = serializer.Deserialize(reader) as DialogContainer;
}
// reset dictionary
dialogContainer.IdToText.Clear();
foreach(var entry in dialogContainer.dialogs)
{
dialogContainer.IdToText.Add(entry.id, entry.text);
}
return dialogContainer;
}
}
Чем позже вы можете использовать, например.
aDialogContainer.idTotext["1"];
обратите внимание, что это вызовет исключение при поиске ключа, которого нет в словаре! Так что обратитесь к решению ниже.
Другой вариант - реализовать метод словаря вместо словаря для поиска правильного текста на лету, используя LINQ: FirstOrDefault :
public string IdtoText(string id)
{
var foundDialog = dialogs.FirstOrDefault(dialog => string.Equals(dialog.id, id));
// here you can decide whether to |
// return null or "" if no element found v
return foundDialog != null ? foundDialog.text : "";
}
Чем бы вы пользовались
aDialogContainer.IdTotext("1");