使用新标签和属性以及根自定义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 ,我建议您保持代码“按原样”(即使用XmlSerializerDataContractSerializer以默认格式序列化MyObject),然后使用XslCompiledTransform 。

这个XSLT将完成这个:

                      

转换

   Destination  99  user pass   

对此:

     user pass     Destination  99