XmlRoot
будет делать что-либо, только если объект окажется корневым элементом сериализованного файла. не влияет на то, как объекты именуются в массивах (насколько я знаю).
Чтобы задать имена массивов и объектов внутри, используйте соответствующие атрибуты:
[XmlArray("NameOfElementWrappingTheItems")]
[XmlArrayItem("NameOfItemsInsideTheArray")]
public object[] Stuff ...
Мы не можем знать, верен ли ваш код, если вы не публикуете XML, который он должен перевести или прочитать.