更新1 问题不是多个命名空间。 我不知道为什么,但如果手动创建生成的类的对象,分配的签名字段和序列化对象,签名节点节点的命名空间为:Xml反序列化c#与多个命名空间
<Signature xmlns="http://www.abrasf.org.br/nfse.xsd">
代替
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
如果我给你在XML usign证书,签名的命名空间是
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
有了第一个命名空间,我可以毫无问题deseralizate,但我需要 标志。
Generated Class from wsdl using wsdl.exe
EnviarLoteRpsEnvio类的EnviarLoteRpsEnvio nfse.xsd:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.abrasf.org.br/nfse.xsd")]
public partial class EnviarLoteRpsEnvio
{
private tcLoteRps loteRpsField;
private SignatureType signatureField;
/// <remarks/>
public tcLoteRps LoteRps
{
get { return this.loteRpsField; }
set { this.loteRpsField = value; }
}
/// <remarks/>
public SignatureType Signature
{
get { return this.signatureField; }
set { this.signatureField = value; }
}
}
SignatureTypeClass:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public partial class SignatureType {
private SignedInfoType signedInfoField;
private SignatureValueType signatureValueField;
private KeyInfoType keyInfoField;
private ObjectType[] objectField;
private string idField;
/// <remarks/>
public SignedInfoType SignedInfo {
get {
return this.signedInfoField;
}
set {
this.signedInfoField = value;
}
}
/// <remarks/>
public SignatureValueType SignatureValue {
get {
return this.signatureValueField;
}
set {
this.signatureValueField = value;
}
}
从生成的类,产生后续的xml:
但是,当我尝试deserealize这个XML,使用功能:
public static object DeserializarParaObjeto(string xmlStr, Type tipo)
{
TextReader tx = new StringReader(xmlStr);
XmlSerializer deSerializer = new XmlSerializer(tipo);
deSerializer.UnknownAttribute += deSerializer_UnknownAttribute;
deSerializer.UnknownElement += deSerializer_UnknownElement;
deSerializer.UnknownNode += deSerializer_UnknownNode;
deSerializer.UnreferencedObject += deSerializer_UnreferencedObject;
return deSerializer.Deserialize(tx);
}
事件deSerializer_UnknownNode被调用(节点未知,签名)。 生成对象,但未分配节点签名。
发生这种情况是因为xml包含多个名称空间?
在这种情况下我需要做什么?
Ps:我没有发布所有的XML和模式,因为太大。