Rem*_*tec 8 c# xml xml-serialization xmlserializer deserialization
将一些xml反序列化为C#中的对象时遇到问题.
我收到的错误是......
xmlns=''> was not expected.
Run Code Online (Sandbox Code Playgroud)
我收到的用于生成课程的XSD如下......
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="xml.AAAAAAA.com/commerce/apres-vente_technique/assistance" xmlns:pgp="xml.AAAAAAA.com/commerce/apres-vente_technique/assistance" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="ListeAvisRemboursements">
<xs:annotation>
<xs:documentation>Liste des avis de remboursements</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="AvisRemboursement" type="pgp:AvisRemboursementType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="AvisRemboursementType">
<xs:annotation>
<xs:documentation>Avis de remboursement lié à une DC</xs:documentation>
</xs:annotation>
<xs:sequence>
Run Code Online (Sandbox Code Playgroud)
(剪断)
我尝试导入的文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<ListeAvisRemboursements xmlns:ast="xml.AAAAAAA.com/commerce/apres-vente_technique/assistance">
<ast:AvisRemboursement NumeroDT="3826961" CodeRA="020545G01" NumeroDC="1">
<ast:DateTraitement>2010-06-22</ast:DateTraitement>
<ast:MontantDC>25.0</ast:MontantDC>
<ast:MontantMO>0.0</ast:MontantMO>
<ast:SommeAD>25.0</ast:SommeAD>
<ast:MontantPR>0.0</ast:MontantPR>
<ast:SommePR>0.0</ast:SommePR>
<ast:FraisGestion>0.0</ast:FraisGestion>
<ast:NombreHeuresTotalRemboursees>0</ast:NombreHeuresTotalRemboursees>
<ast:Etat>C</ast:Etat>
<ast:NoteCredit>319984</ast:NoteCredit>
<ast:Imputation>030</ast:Imputation>
<ast:ListInterventionsPR/>
<ast:ListInterventionsMO/>
</ast:AvisRemboursement>
Run Code Online (Sandbox Code Playgroud)
(剪断)
我认为正在发生的事情是,当.Net试图对xml进行去磁化时,它会触及包含"xmlns:ast"的第一行并对其进行投诉.据我所知,.Net将尝试将属性映射到目标类中的公共属性(并且它不会找到一个名为xmlns.或者我如何处理名称空间有问题.
我的反序列化代码如下所示:
XmlDocument _Doc = new XmlDocument();
_Doc.Load(@"C:\inputfile.xml");
XmlSerializer _XMLSer = new XmlSerializer(typeof(ListeAvisRemboursements));
ListeAvisRemboursements _X = (ListeAvisRemboursements)_XMLSer.Deserialize(new StringReader(_Doc.OuterXml));
Run Code Online (Sandbox Code Playgroud)
我还尝试了将命名空间管理器添加到XML文档的各种组合.
XmlNamespaceManager _Ns = new XmlNamespaceManager(_Doc.NameTable);
_Ns.AddNamespace("ast", "xml.AAAAAAA.com/commerce/apres-vente_technique/assistance");
Run Code Online (Sandbox Code Playgroud)
我知道有一种方法可以用它来告诉.Net接受哪些命名空间.
对于这个问题的一些帮助会很高兴.
---根据请求更新了类片段(抱歉应该包括之前)这是用xsd.exe创建的---
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "xml.AAAAAAA.com/commerce/apres-vente_technique/assistance")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "xml.AAAAAAA.com/commerce/apres-vente_technique/assistance", IsNullable = false)]
public partial class ListeAvisRemboursements
{
private AvisRemboursementType[] avisRemboursementField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("AvisRemboursement")]
public AvisRemboursementType[] AvisRemboursement
{
get
{
return this.avisRemboursementField;
}
set
{
this.avisRemboursementField = value;
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "xml.AAAAAAA.com/commerce/apres-vente_technique/assistance")]
public partial class AvisRemboursementType
{
private System.DateTime dateTraitementField;
private double montantDCField;
private double montantMOField;
private double sommeADField;
private double montantPRField;
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 19
没有完整的xsd/xml,或(或者)你的C#类,我们无法重现.但是从xml向上工作,这对我来说很好; 意思是:在您发布的代码/数据中,错误不是(据我所知).你能发布一个更完整(可重复)的例子吗?
public class ListeAvisRemboursements
{
private readonly List<AvisRemboursement> items = new List<AvisRemboursement>();
[XmlElement("AvisRemboursement", Namespace = "xml.AAAAAAA.com/commerce/apres-vente_technique/assistance")]
public List<AvisRemboursement> Items { get { return items; } }
}
public class AvisRemboursement
{
[XmlAttribute] public string NumeroDT {get;set;}
[XmlAttribute] public string CodeRA {get;set;}
[XmlAttribute] public string NumeroDC {get;set;}
public DateTime DateTraitement { get; set; }
public decimal MontantDC { get; set; }
public decimal MontantMO { get; set; }
public decimal SommeAD { get; set; }
public decimal MontantPR { get; set; }
public decimal SommePR { get; set; }
public decimal FraisGestion { get; set; }
public int NombreHeuresTotalRemboursees { get; set; }
public string Etat { get; set; }
public string NoteCredit { get; set; }
public string Imputation { get; set; }
}
static void Main()
{
var ser = new XmlSerializer(typeof(ListeAvisRemboursements));
var wrapper = (ListeAvisRemboursements)ser.Deserialize(new StringReader(xml));
// inspect wrapper.Items etc
}
Run Code Online (Sandbox Code Playgroud)
也适用于:
var ser = new XmlSerializer(typeof(ListeAvisRemboursements));
using (var reader = XmlReader.Create("inputfile.xml"))
{
var wrapper = (ListeAvisRemboursements)ser.Deserialize(reader);
}
Run Code Online (Sandbox Code Playgroud)
和:
XmlDocument _Doc = new XmlDocument();
_Doc.Load("inputfile.xml");
var ser = new XmlSerializer(typeof(ListeAvisRemboursements));
var wrapper = (ListeAvisRemboursements)ser.Deserialize(new StringReader(_Doc.OuterXml));
Run Code Online (Sandbox Code Playgroud)
和
XmlDocument _Doc = new XmlDocument();
_Doc.Load("inputfile.xml");
var ser = new XmlSerializer(typeof(ListeAvisRemboursements));
var wrapper = (ListeAvisRemboursements)ser.Deserialize(new XmlNodeReader(_Doc.DocumentElement));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
52758 次 |
最近记录: |