【发布时间】:2009-06-01 05:30:48
【问题描述】:
我正在尝试生成这样的 XML:
<?xml version="1.0"?>
<!DOCTYPE APIRequest SYSTEM
"https://url">
<APIRequest>
<Head>
<Key>123</Key>
</Head>
<ObjectClass>
<Field>Value</Field
</ObjectClass>
</APIRequest>
我有一个用 XMLSerialization 属性装饰的类 (ObjectClass),如下所示:
[XmlRoot("ObjectClass")]
public class ObjectClass
{
[XmlElement("Field")]
public string Field { get; set; }
}
我真正的直觉想法是让这个工作在我序列化时做到这一点:
ObjectClass inst = new ObjectClass();
XmlSerializer serializer = new XmlSerializer(inst.GetType(), "");
StringWriter w = new StringWriter();
w.WriteLine(@"<?xml version=""1.0""?>");
w.WriteLine("<!DOCTYPE APIRequest SYSTEM");
w.WriteLine(@"""https://url"">");
w.WriteLine("<APIRequest>");
w.WriteLine("<Head>");
w.WriteLine(@"<Field>Value</Field>");
w.WriteLine(@"</Head>");
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
serializer.Serialize(w, inst, ns);
w.WriteLine("</APIRequest>");
但是,这会生成这样的 XML:
<?xml version="1.0"?>
<!DOCTYPE APIRequest SYSTEM
"https://url">
<APIRequest>
<Head>
<Key>123</Key>
</Head>
<?xml version="1.0" encoding="utf-16"?>
<ObjectClass>
<Field>Value</Field>
</ObjectClass>
</APIRequest>
即serialize 语句自动添加
我知道我在攻击这个错误所以有人可以指出我正确的方向吗?
作为说明,我认为只创建一个包含 ObjectClass 的 APIRequest 类是没有实际意义的(因为据说有 20 种不同类型的 ObjectClass,每个都需要这个样板文件)但如果有,请纠正我我错了。
【问题讨论】:
-
谢谢,对 .NET 2.0 有什么想法吗?
-
自动?您似乎正在手动添加声明: w.WriteLine(@"");.
-
@Cerebrus,他不想要
标记内的内部 。 -
@John DataContractSeializer 没有创建标题
-
DataContractSerializer也不会发出 DTD 声明。
标签: .net xml-serialization .net-2.0