Атрибут xmlns:if
является объявлением пространства имен. Это специальные атрибуты, и их не следует указывать явно в качестве свойств, как вы это сделали здесь - сериализатор будет обрабатывать это за вас.
Я бы также отметил, что пространства имен наследуются от их родителей, поэтому большинство места, которые вы указали в пространстве имен, не обязательны. Вам также нужен только атрибут XmlRoot
для root. Этого должно быть достаточно:
public class Bd
{
[XmlElement("msg")]
public Msg Msg { get; set; }
}
[XmlRoot("tr", Namespace = "http://www.fca.com/ifast")]
public class Tr
{
[XmlElement("hd")]
public Hd Hd { get; set; }
[XmlElement("bd")]
public Bd Bd { get; set; }
}
Два включенных вами бита XML семантически одинаковы, но если вы хотите контролировать префикс пространства имен, вы можете сделать это при сериализации:
var ns = new XmlSerializerNamespaces();
ns.Add("if", "http://www.fca.com/ifast");
var serializer = new XmlSerializer(typeof(Tr));
serializer.Serialize(stream, obj, ns);
См. эту скрипку для рабочего демо.