Mic*_*hel 6 c# xml-serialization
我必须创建一个前缀为所有元素的XML文件,如下所示:
<ps:Request num="123" xmlns:ps="www.ladieda.com">
<ps:ClientId>5566</ps:ClientId>
<ps:Request>
Run Code Online (Sandbox Code Playgroud)
当我序列化我的对象时,c#很聪明并且这样做:
<Request num="123" xmlns="www.ladieda.com">
<ClientId>5566</ClientId>
<Request>
Run Code Online (Sandbox Code Playgroud)
这很好,因为ps:不是必需的.
但有没有办法强制C#序列化所有前缀?
我的序列化代码是这样的(对于传入的对象pObject):
String XmlizedString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(pObject.GetType());
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, pObject);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
return XmlizedString;
private String UTF8ByteArrayToString(Byte[] characters)
{
UTF8Encoding encoding = new UTF8Encoding();
String constructedString = encoding.GetString(characters);
return (constructedString);
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*ers 15
首先,如果您的字符串的使用者正在处理XML,那么他们就不会关心前缀,因为它与XML无关.也许他们不理解XML,并认为他们正在处理一个字符串(可能需要在每个元素上都有字符串"ps:").
其次,您应该稍微更改一下代码:
XmlSerializer xs = new XmlSerializer(pObject.GetType());
using (MemoryStream memoryStream = new MemoryStream())
{
XmlWriterSettings settings = new XmlWriterSettings()
{
Encoding = Encoding.UTF8
};
using (XmlWriter writer = XmlWriter.Create(memoryStream, settings))
{
xs.Serialize(writer, pObject);
}
return Encoding.UTF8.GetString(memoryStream.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
如果抛出异常,这将正确处理流和XmlWriter,停止使用已弃用的XmlTextWriter类,但仍返回包含为UTF-8编写的XML的字符串.
最后,要控制前缀,请参阅"如何:限定XML元素和XML属性名称":
XmlSerializerNamespaces myNamespaces = new XmlSerializerNamespaces();
myNamespaces.Add("ps", "www.ladieda.com");
XmlSerializer xs = new XmlSerializer(pObject.GetType());
using (MemoryStream memoryStream = new MemoryStream())
{
XmlWriterSettings settings = new XmlWriterSettings()
{
Encoding = Encoding.UTF8
};
using (XmlWriter writer = XmlWriter.Create(memoryStream, settings))
{
xs.Serialize(writer, pObject, myNamespaces);
}
return Encoding.UTF8.GetString(memoryStream.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12478 次 |
| 最近记录: |