使用新标签和属性以及根自定义XML序列化
这是我的类型:
public class MyObject { public string destAdd { get; set; } public long Time { get; set; } public int maxNumb { get; set; } public Account AccountCredentials { get; set; } public System.String Serialize() { String result = ""; XmlSerializer xs = new XmlSerializer(typeof(MyObject)); MemoryStream ms = new MemoryStream(); xs.Serialize(ms, this); result = System.Text.Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); ms.Dispose(); xs = null; return result; } public static MyObject DeSerialize(String s) { MyObject result = new MyObject(); XmlSerializer xs = new XmlSerializer(typeof(MyObject)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(s)); result = (MyObject)xs.Deserialize(ms); ms.Close(); ms.Dispose(); xs = null; return result; } }
然后我像这样序列化它:
MyObject obj = new MyObject(); obj.destAdd = "Destination"; obj.maxNumb = 99; obj.Time = 128; obj.Account = new Account { username = "user", password = "pass" }; string seializeObj = obj.Serialize();
结果是:
Destination 128 99 user pass
但我需要以下结果:
user pass Destination 128 99
如何实现序列化以获得此结果? 有什么建议吗?
您似乎正在尝试使用自定义安全标头调用Web服务。 通常,最简单的方法是从目标Web服务的WSDL生成一组代理类。
或
- 右键单击Visual Studio中的“添加服务引用/添加Web引用”
- 或者,如果您拥有该服务的WSDL和xsd文件,则使用wsdl.exe命令行工具 (例如
wsdl.exe *.wsdl *.xsd //language:c#
) - 请参阅此处有关如何在ws:security标头上设置安全信息的信息
但是,如果您100%确定需要获得上面的确切soapEnv Xml
,我建议您保持代码“按原样”(即使用XmlSerializer
或DataContractSerializer
以默认格式序列化MyObject),然后使用XslCompiledTransform 。
这个XSLT将完成这个:
转换
Destination 99 user pass
对此:
user pass Destination 99