diff --git a/DBCD.Tests/WritingTest.cs b/DBCD.Tests/WritingTest.cs index 873c746..9aa178a 100644 --- a/DBCD.Tests/WritingTest.cs +++ b/DBCD.Tests/WritingTest.cs @@ -66,6 +66,21 @@ public void TestWritingNewRowDb2WithArrayField() Assert.AreEqual(116146, outputStorage.Count); } + [TestMethod] + public void TestWritingNewRowDb2WithArrayOfStringsField() + { + DBCD dbcd = new(wagoDBCProvider, githubDBDProvider); + IDBCDStorage storage = dbcd.Load("BattlePetEffectProperties", "9.2.7.45745"); + + storage.Add(10, storage.ConstructRow(10)); + storage.Save(Path.Join(OutputPath, "BattlePetEffectProperties.db2")); + + DBCD localDbcd = new(new FilesystemDBCProvider(OutputPath), githubDBDProvider); + IDBCDStorage outputStorage = localDbcd.Load("BattlePetEffectProperties", "9.2.7.45745"); + + Assert.AreEqual(134, outputStorage.Count); + } + [TestMethod] public void TestSavingSameStorageTwice() { diff --git a/DBCD/DBCDStorage.cs b/DBCD/DBCDStorage.cs index d2f45d7..444409c 100644 --- a/DBCD/DBCDStorage.cs +++ b/DBCD/DBCDStorage.cs @@ -204,10 +204,19 @@ public DBCDRow ConstructRow(int index) foreach (var arrayField in arrayFields) { var count = arrayField.GetCustomAttribute().Count; - Array rowRecords = Array.CreateInstance(arrayField.FieldType.GetElementType(), count); + var elementType = arrayField.FieldType.GetElementType(); + var isStringField = elementType == typeof(string); + + Array rowRecords = Array.CreateInstance(elementType, count); for (var i = 0; i < count; i++) { - rowRecords.SetValue(Activator.CreateInstance(arrayField.FieldType.GetElementType()), i); + if (isStringField) + { + rowRecords.SetValue(string.Empty, i); + } else + { + rowRecords.SetValue(Activator.CreateInstance(elementType), i); + } } arrayField.SetValue(raw, rowRecords); }