Arn*_* F. 6 .net c# xml serialization compact-framework
我有一个在CF.NET和.NET下运行的库,但两者之间的序列化不同.因此,在.NET下生成的XML文件在.NET下是不可读的,这对我来说是个大问题!
这里是代码示例:
[Serializable, XmlRoot("config")]
public sealed class RemoteHost : IEquatable<RemoteHost>
{
// ...
}
public class Program
{
public static void Main()
{
RemoteHost host = new RemoteHost("A");
List<RemoteHost> hosts = new List<RemoteHost>();
hosts.Add(host);
XmlSerializer ser = new XmlSerializer(typeof(List<RemoteHost>));
ser.Serialize(Console.Out, hosts);
}
}
Run Code Online (Sandbox Code Playgroud)
CF.NET xml:
<?xml version="1.0"?>
<ArrayOfConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<config Name="A">
</config>
</ArrayOfConfig>
Run Code Online (Sandbox Code Playgroud)
.NET xml
<?xml version="1.0" encoding="ibm850"?>
<ArrayOfRemoteHost xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<RemoteHost Name="A">
</RemoteHost>
</ArrayOfRemoteHost>
Run Code Online (Sandbox Code Playgroud)
如何修改程序以生成相同的XML?
确实,它看起来像是处理根名称的错误。解决方法:手动控制 root:
[XmlRoot("foo")]
public class MyRoot {
[XmlElement("bar")]
public List<RemoteHost> Hosts {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
这应该序列化为
<foo><bar>...</bar>...</foo>
Run Code Online (Sandbox Code Playgroud)
在任一平台上。foo
将和替换bar
为您喜欢的名称。
(就我个人而言,我会使用二进制输出;p)