如何将.xml文件与xmlns属性一起反序列化?

问题描述

| 我正在尝试学习反序列化。我已经编写了这段代码以反序列化* .hbm.xml文件。 每个元素都正确加载,但\“ xmlns \”。异常中的消息是:
<hibernate-mapping xmlns=\'urn:nhibernate-mapping-2.2\'> was not expected.
应该怎么做才能解决这个问题? 您想查看我的完整代码吗? 干得好:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<hibernate-mapping
assembly=\"Sample.CustomerService.Domain\" namespace=\"Sample.CustomerService.Domain\"
>
  <class name=\"MyTable\" table=\"MyTable\" lazy=\"true\" >
    <id name=\"ID\">
      <generator class=\"identity\" />
      <column name=\"ID\" sql-type=\"int\" not-null=\"true\" />
    </id>
    <property name=\"Name\">
      <column name=\"Name\" sql-type=\"varchar\" not-null=\"false\" />
    </property>
    <property name=\"MfgDate\">
      <column name=\"MfgDate\" sql-type=\"datetime\" not-null=\"true\" />
    </property>
  </class>
</hibernate-mapping>
public class Class
    {
        [XmlAttribute(\"name\")]
        public string Name { get; set; }

        [XmlAttribute(\"table\")]
        public string Table { get; set; }

        [XmlAttribute(\"lazy\")]
        public bool Lazy { get; set; }

        [XmlElement(\"id\")]
        public Id Id { get; set; }

        [XmlElement(\"property\")]
        public Property [] Properties { get; set; }
    }

 public class Column
    {
        [XmlAttribute(\"name\")]
        public string ColumnName { get; set; }

        [XmlAttribute(\"sql-type\")]
        public string SqlTypeName { get; set; }

        [XmlAttribute(\"not-null\")]
        public bool NotNull { get; set; }
    }

public class Generator
    {
        [XmlAttribute(\"class\")]
        public string Class { get; set; }
    }

[XmlRoot(\"hibernate-mapping\",Namespace = \"urn:nhibernate-mapping-2.2\")]
    public class HibernateMapping
    {
        [XmlAttribute(\"assembly\")]
        public string AssemblyName { get; set; }

        [XmlAttribute(\"namespace\")]
        public string NamespaceName { get; set; }

        [XmlElement(\"class\")]
        public Class Class { get; set; }

        public override string  ToString()
        {
            StringBuilder sb = new StringBuilder(NamespaceName);
            sb.Append(\".\");
            sb.Append(Class.Name);

            return sb.ToString();
        }
    }

public class Id
    {
        [XmlElement(\"generator\")]
        public Generator Generator { get; set; }

        [XmlElement(\"column\")]
        public Column Column { get; set; }
    }

public class Property
    {
        [XmlAttribute(\"name\")]
        public string Name { get; set; }

        [XmlAttribute(\"column\")]
        public string Column { get; set; }

        [XmlAttribute(\"type\")]
        public string SqlTypeName { get; set; }

        [XmlAttribute(\"not-null\")]
        public bool NotNull { get; set; }

        [XmlElement(\"column\")]
        public Column PropColumn { get; set; }

        public string GetColumnName()
        {
            if (PropColumn != null)
            {
                return PropColumn.ColumnName;
            }
            else
            {
                return Name;
            }
        }

        public string GetSqlTypeName()
        {
            if (PropColumn != null)
            {
                return PropColumn.SqlTypeName;
            }
            else
            {
                return SqlTypeName;
            }
        }

        public bool GetNotNull()
        {
            if (PropColumn != null)
            {
                return PropColumn.NotNull;
            }
            else
            {
                return NotNull;
            }
        }
    }

class Program
    {
        static void Main(string[] args)
        {
            //IList<HibernateMapping> list = HbmReader.Get(\"How_To_Deserialize_a_Hbm_File\");
//            string xml = @\"<?xml version=\"\"1.0\"\" encoding=\"\"utf-8\"\" ?>
//<hibernate-mapping xmlns=\"\"urn:nhibernate-mapping-2.2\"\">
//    <class name=\"\"Example.Library.Resources.TestObject,Example.Library\"\" table=\"\"test_object\"\" lazy=\"\"false\"\">
//        <id name=\"\"TestId\"\" column=\"\"TestId\"\" type=\"\"Guid\"\"> 
//            <generator class=\"\"assigned\"\" /> 
//        </id> 
//        <property name=\"\"Name\"\" type=\"\"String\"\" length=\"\"45\"\" />
//    </class>
//</hibernate-mapping>\";

            Assembly assembly = Assembly.Load(\"Sample.CustomerService.Domain\");
            string[] manifestResourceNames = assembly.GetManifestResourceNames();

            XmlSerializer ser = new XmlSerializer(typeof(HibernateMapping));

            Stream stream = assembly.GetManifestResourceStream(manifestResourceNames[0]);

            HibernateMapping obj = (HibernateMapping)ser.Deserialize(new StreamReader(stream));

            Console.WriteLine(obj.Class.Name);
            Console.WriteLine(obj.Class.Table);
            foreach (var prop in obj.Class.Properties)
            {
                Console.WriteLine(\"prop: \" + prop.Name);
            }

            string str = string.Empty;
        }
    }
    

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)