public void LoadResource(GenericObject data) { Text = data.Type; listView1.BeginUpdate(); try { foreach (string name in data.PropertyValues) { var item = new ListViewItem(name); var dataType = data.GetDataType(name); item.SubItems.Add(dataType); var isArray = dataType.StartsWith("@") && !dataType.StartsWith("@*"); item.SubItems.Add(isArray ? "" : data.GetPropertyValueAsString(name, _explorer.StringsFile)); listView1.Items.Add(item); if (isArray) { var items = (List<object>) data.GetPropertyValue(name); for(int i=0; i<items.Count; i++) { var childItem = new ListViewItem("[" + i + "]"); childItem.SubItems.Add(dataType.Substring(1)); childItem.SubItems.Add(items[i].ToString()); childItem.IndentCount = 1; listView1.Items.Add(childItem); } } } if (data.UndecodedData != null) { var item = new ListViewItem("<undecoded data>"); item.SubItems.Add("byte[]"); item.SubItems.Add(data.UndecodedData.Length + " bytes"); listView1.Items.Add(item); } } finally { listView1.EndUpdate(); } }
private static void ReadGenericObjectProperty(GenericObject target, IFileStream stream, string type, uint size, string name) { IPropertySerializer serializer = GetSerializer(type); if (serializer != null) { target.SetProperty(name, type, serializer.Deserialize(stream)); } else { uint valueSize = size - 4; byte[] value = new byte[valueSize]; stream.SerializeValue(ref value, valueSize); target.SetProperty(name, type, value); } }