错误元素上的XML序列化命名空间

时间:2016-04-26 10:17:25

标签: c# xml

我将XML发布到一个已经从我的C#类序列化的API,除了生成XML时特定命名空间的位置以外,一切看起来都正确但我不确定原因。

我需要a命名空间位于appointmentAvailability元素上。忽略转义反转,因为我将xml从visual studio调试器中复制出来。

我哪里错了?

测试功能

    var a = new AppointmentAvailability
    {
        TimeSlot = "AM"

    };
    var aa = new AppointmentAvailabilityContainer();
    aa.appointmentAvailability = a;
    var nd = new Dictionary<string, string>();
    nd.Add("a", "http://maindomain/Appointments");
    var x = XmlManager.SerializeThis<AppointmentAvailabilityContainer>(aa,nd);
    var checkappointmentavailability = FluidWeb.CheckAppointmentAvailability(a);

通用序列化功能

public static string SerializeThis<T>(object obj, Dictionary<string, string> dictionary)
        {
            try
            {
                XmlDocument xd = new XmlDocument();
                string xml = "";
                var xs = new XmlSerializer(obj.GetType());
                XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();

                foreach (var item in dictionary)
                {
                    xsn.Add(item.Key, item.Value);
                }

                using (MemoryStream ms = new MemoryStream())
                {
                    xs.Serialize(ms, obj, xsn);
                    ms.Position = 0;
                    xd.Load(ms);
                    xml = xd.InnerXml;
                }
                return xml;
            }
            catch(XmlException x)
            {
                var xml = "Could not serialise.";
                return xml;
            }
        }

[XmlRoot("AppointmentAvailability", Namespace = "http://maindomain")]
    public class AppointmentAvailabilityContainer
    {
        [XmlElement("appointmentAvailability")]
        public AppointmentAvailability appointmentAvailability { get; set; }
    }

[XmlRoot("appointmentAvailability", Namespace = "http://maindomain/Appointments")]
    [XmlType("a")]
    public class AppointmentAvailability
    {

        [XmlElement("TimeSlot")]
        public string TimeSlot { get; set; }
    }

生成xml

<?xml version=\"1.0\"?>
<AppointmentAvailability xmlns:a=\"http://maindomain/Appointments\" xmlns=\"http://maindomain">
<appointmentAvailability>
<a:TimeSlot>AM</a:TimeSlot>
</appointmentAvailability>
</AppointmentAvailability>

xml试图实现

<?xml version=\"1.0\"?>
<AppointmentAvailability  xmlns=\"http://maindomain">
<appointmentAvailability xmlns:a=\"http://maindomain/Appointments\">
<a:TimeSlot>AM</a:TimeSlot>
</appointmentAvailability>
</AppointmentAvailability>

0 个答案:

没有答案