gpt4 book ai didi

不带 文本声明的 .NET XML 序列化

转载 作者:行者123 更新时间:2023-12-03 04:06:26 26 4
gpt4 key购买 nike

我正在尝试生成这样的 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>

即序列化语句会自动添加

我知道我的攻击是错误的,所以有人可以指出我正确的方向吗?

作为一个注释,我认为仅仅创建一个包含 ObjectClass 的 APIRequest 类没有实际意义(因为据说有 20 种不同类型的 ObjectClass,每种类型都需要这个样板),但是如果我错了。

最佳答案

试试这个:

internal static string ToXml(object obj)
{
string retval = null;
if (obj != null)
{
StringBuilder sb = new StringBuilder();
using(XmlWriter writer = XmlWriter.Create(sb, new XmlWriterSettings() { OmitXmlDeclaration = true }))
{
new XmlSerializer(obj.GetType()).Serialize(writer, obj);
}
retval = sb.ToString();
}
return retval;
}

关于不带 <?xml> 文本声明的 .NET XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/933664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com