如何将.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;
}
}
没有找到相关结果
已邀请:
4 个回复
鲁釜头
,
,
和
(等)上的
属性即可解决;示例如下所示: 输出:
Xml(从此处开始):
C#:
请注意,我只映射了一些xml值-但它应该表明它实际上是有效的。
骇毖煽洁铂
(XML名称空间)属性保留给XML。 XmlSerializer永远不会将其返回给您的类。
孤捷侩
蓄荣糖些