我想在使用XmlSerializer时获取以下XML:
<?xml version="1.0"?>
<GetProfileRequest xmlns="urn:veloconnect:profile-1.1">
</GetProfileRequest>
但是当我序列化时,我得到以下XML:
<?xml version="1.0"?>
<GetProfileRequest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</GetProfileRequest>
序列化代码:
GetProfileRequest request = new GetProfileRequest();
XmlSerializer serialize = new XmlSerializer(typeof(GetProfileRequest));
serialize.Serialize(Response.OutputStream, request);
类:
[System.Xml.Serialization.XmlIncludeAttribute(typeof(TransactionRequestType))]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "urn:veloconnect:profile-1.1")]
public partial class GetProfileRequest : RequestType
{
}
[System.Xml.Serialization.XmlIncludeAttribute(typeof(TransactionRequestType))]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:veloconnect:transaction-1.0")]
public partial class RequestType
{
}
是否有可以在类“GetProfileRequest”中定义的属性或者有助于将xmlns =“urn:veloconnect:profile-1.1”命名空间添加到XML中的属性?
我还尝试通过以下代码手动添加XmlSerializeNamespace,但这只删除了根元素中的所有命名空间声明,而不是创建所需的声明。
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "urn:veloconnect:profile-1.1");
// and then call serialize.Serialize with ns
答案 0 :(得分:2)
您缺少一行代码。 在您的班级中添加以下代码。
**[System.Xml.Serialization.XmlRoot("GetProfileRequest", Namespace = "urn:veloconnect:profile-1.1", IsNullable = false)**]
希望它会奏效。它对我有用。
答案 1 :(得分:0)
好吧,我能够尝试运行XmlSerializeNamespace。我比我想象的更接近。这不是一个干净的解决方案,因为它是从序列化程序而不是类本身处理的。但它比没有解决方案更好。如果有人有更好的解决方案,我将不胜感激。
string sDefaultNamespace = "urn:veloconnect:profile-1.1";
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", sDefaultNamespace);
XmlSerializer serialize = new XmlSerializer(ResponseResult.GetType(), sDefaultNamespace);
serialize.Serialize(Response.OutputStream, ResponseResult, ns);