【发布时间】:2019-01-06 11:26:19
【问题描述】:
我有以下类定义
[XmlRoot(ElementName = "person",Namespace = "MyNamespace")]
public class Person : IXmlSerializable
{
public string FirstName { get; set; }
[XmlNamespaceDeclarations]
public XmlSerializerNamespaces Namespaces
{
get
{
var xmlSerializerNamespaces = new XmlSerializerNamespaces();
xmlSerializerNamespaces.Add("My", "MyNamespace");
return xmlSerializerNamespaces;
}
}
public string LastName { get; set; }
public XmlSchema GetSchema()
{
return null;
}
/// <exception cref="NotSupportedException"/>
public void ReadXml(XmlReader reader)
{
throw new NotSupportedException();
}
public void WriteXml(XmlWriter writer)
{
writer.WriteElementString("firstName",FirstName);
writer.WriteElementString("lastName", LastName);
}
}
我想用 MyNamespace 的 My: 前缀对其进行序列化,所以当我调用代码时
var xmlSerializer = new XmlSerializer(typeof(Person));
var person = new Person
{ FirstName = "John",LastName = "Doe"};
xmlSerializer.Serialize(Console.Out, person, person.Namespaces);
我希望得到以下输出:
<?xml version="1.0" encoding="ibm850"?>
<My:person xmlns:My="MyNamespace">
<My:firstName>John</My:firstName>
<My:lastName>Doe</My:lastName>
</My:person>
但我得到的不是它,而是以下输出:
<?xml version="1.0" encoding="ibm850"?>
<person xmlns="MyNamespace">
<firstName>John</firstName>
<lastName>Doe</lastName>
</person>
我知道当我使用 SerializableAttribute 属性而不是从 IXmlSerializable 继承时,编写前缀是有效的,但是我在项目中的类要复杂得多,我不能使用默认 XmlSerializer。
【问题讨论】:
-
你能把你的数据迁移到json吗?这要容易得多。
-
@AndrewGray 不,我不能。我正在实现 WebDAV,但它没有在 Json 中通信。
标签: xml-serialization xml-namespaces prefix ixmlserializable