简体   繁体   English

C#反序列化CBISDDStsRptPhyMsg

[英]C# deserialization CBISDDStsRptPhyMsg

I need to deserialize a XML that follows the CBI Italian standard, the problem is that I've already marked every class with the namespace's but I'm still unable to deserialize. 我需要反序列化遵循CBI Italian标准的XML,问题是我已经用名称空间标记了每个类,但是我仍然无法反序列化。

This is part of the xml that I'm trying to deserialize (content erased): 这是我要反序列化(删除的内容)的xml的一部分:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RISPOSTASDD:CBISDDStsRptPhyMsg xmlns:HE2E="urn:CBI:xsd:CBIHdrSrv.001.07" xmlns:BODY="urn:CBI:xsd:CBIBdySDDStsRpt.00.01.00" xmlns:SGNT="urn:CBI:xsd:CBISgnInf.001.04" xmlns:RISPOSTASDD="urn:CBI:xsd:CBISDDStsRptPhyMsg.00.01.00" xmlns:LMSG="urn:CBI:xsd:CBISDDStsRptLogMsg.00.01.00" xmlns:HTRT="urn:CBI:xsd:CBIHdrTrt.001.07">
    <RISPOSTASDD:CBIHdrTrt>
        <HTRT:IdCBISndrf></HTRT:IdCBISndrf>
        <HTRT:IdCBIRcvrf></HTRT:IdCBIRcvrf>
        <HTRT:SrvNm></HTRT:SrvNm>
        <HTRT:IdMsgTrt></HTRT:IdMsgTrt>
        <HTRT:XMLCrtDt></HTRT:XMLCrtDt>
        <HTRT:RtrnAddrl></HTRT:RtrnAddrl>
    </RISPOSTASDD:CBIHdrTrt>
    <RISPOSTASDD:CBIHdrSrv>
        <HE2E:SrvInfo>
            <HE2E:SrvNm></HE2E:SrvNm>
            <HE2E:IdE2EMsg></HE2E:IdE2EMsg>
            <HE2E:XMLCrtDt></HE2E:XMLCrtDt>
        </HE2E:SrvInfo>
        <HE2E:Sender>
            <HE2E:IdCBISend></HE2E:IdCBISend>
            <HE2E:SendTyp></HE2E:SendTyp>
            <HE2E:CBIRefrSend></HE2E:CBIRefrSend>
        </HE2E:Sender>
        <HE2E:Receiver>
            <HE2E:IdCBIRecv></HE2E:IdCBIRecv>
            <HE2E:RecvTyp></HE2E:RecvTyp>
            <HE2E:CBIRefrRecv></HE2E:CBIRefrRecv>
        </HE2E:Receiver>
        <HE2E:DiagInfo>
            <HE2E:UsrBnk></HE2E:UsrBnk>
            <HE2E:DiagVers></HE2E:DiagVers>
            <HE2E:ChkSbj></HE2E:ChkSbj>
            <HE2E:ChkDt></HE2E:ChkDt>
        </HE2E:DiagInfo>
        <HE2E:CongrInfo>
            <HE2E:SrvBdyNb></HE2E:SrvBdyNb>
        </HE2E:CongrInfo>
    </RISPOSTASDD:CBIHdrSrv>
    <RISPOSTASDD:CBIBdySDDStsRpt>
        <BODY:PhyMsgInf>
            <BODY:PhyMsgTpCd></BODY:PhyMsgTpCd>
            <BODY:NbOfLogMsg></BODY:NbOfLogMsg>
        </BODY:PhyMsgInf>
        <BODY:CBIEnvelSDDStsRptLogMsg>
            <BODY:CBISDDStsRptLogMsg>...

And these are (some) the classes that I've wrote to deserialize it: 这些是我为反序列化而编写的(一些)类:

[Serializable, XmlRoot(Namespace = "urn:CBI:xsd:CBISDDStsRptPhyMsg.00.01.00")]
public class CBISDDStsRptPhyMsg
{
    [XmlElement("CBIHdrTrt", Namespace = "urn:CBI:xsd:CBIHdrTrt.001.07")]
    public CBIHdrTrt CBIHdrTrt {get;set;}
    [XmlElement("CBIHdrSrv", Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public CBIHdrSrv CBIHdrSrv {get;set;}
    [XmlElement("CBIBdySDDStsRpt", Namespace="urn:CBI:xsd:CBIBdySDDStsRpt.00.01.00")]
    public CBIBdySDDStsRpt CBIBdySDDStsRpt { get; set; }
}
[Serializable]
public class CBIHdrTrt
{
    [XmlElement("IdCBISndrf", Namespace = "urn:CBI:xsd:CBIHdrTrt.001.07")]
    public string IdCBISndrf { get; set; }
    [XmlElement("IdCBIRcvrf", Namespace = "urn:CBI:xsd:CBIHdrTrt.001.07")]
    public string IdCBIRcvrf { get; set; }
    [XmlElement("SrvNm", Namespace = "urn:CBI:xsd:CBIHdrTrt.001.07")]
    public string SrvNm { get; set; }
    [XmlElement("IdMsgTrt", Namespace = "urn:CBI:xsd:CBIHdrTrt.001.07")]
    public string IdMsgTrt { get; set; }
    [XmlElement("XMLCrtDt", Namespace = "urn:CBI:xsd:CBIHdrTrt.001.07")]
    public DateTime XMLCrtDt { get; set; }
    [XmlElement("RtrnAddrl", Namespace = "urn:CBI:xsd:CBIHdrTrt.001.07")]
    public string RtrnAddrl { get; set; }
}
[Serializable]
public class CBIHdrSrv
{
    [XmlElement("SrvInfo",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public SrvInfo SrvInfo { get; set; }
    [XmlElement("Sender",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public Sender Sender { get; set; }
    [XmlElement("Receiver",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public Receiver Receiver { get; set; }
    [XmlElement("DiagInfo",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public DiagInfo DiagInfo { get; set; }
    [XmlElement("CongrInfo",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public CongrInfo CongrInfo { get; set; }
}

[Serializable]
public class SrvInfo
{
    [XmlElement("SrvNm",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public string SrvNm { get; set; }
    [XmlElement("IdE2EMsg",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public string IdE2EMsg { get; set; }
    [XmlElement("XMLCrtDt",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public DateTime XMLCrtDt { get; set; }
}

[Serializable]
public class Sender
{
    [XmlElement("IdCBISend",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public string IdCBISend { get; set; }
    [XmlElement("SendTyp",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public string SendTyp { get; set; }
    [XmlElement("CBIRefrSend",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public string CBIRefrSend { get; set; }
}

[Serializable]
public class Receiver
{
    [XmlElement("IdCBIRecv",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public string IdCBIRecv { get; set; }
    [XmlElement("RecvTyp",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public string RecvTyp { get; set; }
    [XmlElement("CBIRefrRecv",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public string CBIRefrRecv { get; set; }
}

[Serializable]
public class DiagInfo
{
    [XmlElement("UsrBnk",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public string UsrBnk { get; set; }
    [XmlElement("DiagVers",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public string DiagVers { get; set; }
    [XmlElement("ChkSbj",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public string ChkSbj { get; set; }
    [XmlElement("ChkDt",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public DateTime ChkDt { get; set; }
}

[Serializable]
public class CongrInfo
{
    [XmlElement("SrvBdyNb",Namespace="urn:CBI:xsd:CBIHdrSrv.001.07")]
    public int SrvBdyNb { get; set; }
}
[Serializable]
public class CBIBdySDDStsRpt
{
    [XmlElement("PhyMsgInf", Namespace = "urn:CBI:xsd:CBIBdySDDStsRpt.00.01.00")]
    public PhyMsgInf PhyMsgInf { get; set; }
    [XmlElement("CBIEnvelSDDStsRptLogMsg", Namespace = "urn:CBI:xsd:CBIBdySDDStsRpt.00.01.00")]
    public CBIEnvelSDDStsRptLogMsg CBIEnvelSDDStsRptLogMsg { get; set; }
}

[Serializable]
public class CBIEnvelSDDStsRptLogMsg
{
    [XmlElement("CBISDDStsRptLogMsg", Namespace = "urn:CBI:xsd:CBIBdySDDStsRpt.00.01.00")]
    public CBISDDStsRptLogMsg CBISDDStsRptLogMsg { get; set; }
}

[Serializable]
public class CBISDDStsRptLogMsg
{
    [XmlElement("GrpHdr", Namespace = "urn:CBI:xsd:CBISDDStsRptLogMsg.00.01.00")]
    public GroupHeader GroupHeader { get; set; }
    [XmlElement("OrgnlGrpInfAndSts", Namespace = "urn:CBI:xsd:CBISDDStsRptLogMsg.00.01.00")]
    public OriginalGroupInformationAndStatus OriginalGroupInformationAndStatus { get; set; }
    [XmlElement("OrgnlPmtInfAndSts", Namespace = "urn:CBI:xsd:CBISDDStsRptLogMsg.00.01.00")]
    public List<OriginalPaymentInformationAndStatus> OriginalPaymentInformationAndStatus { get; set; }
}

My deserialization is pretty simple: 我的反序列化非常简单:

                var sITA = new XmlSerializer(typeof(CBISDDStsRptPhyMsg));
                var xmlITA = new CBISDDStsRptPhyMsg();
                using(var reader = XmlReader.Create(fileInput.InputStream))
                {
                    xmlITA = (CBISDDStsRptPhyMsg)sITA.Deserialize(reader);
                }

and at the end of it, all of my 3 main objects are null. 最后,我的3个主要对象都是null。

Does anyone have a clue on what I'm doing wrong? 有人知道我在做什么错吗? I've already managed to serialize/deserialize every SEPA files (pain.00x) that I've found but this Italian standard is giving me quite some head-aches for a while. 我已经设法对找到的每个SEPA文件(pain.00x)进行序列化/反序列化,但是这种意大利标准在一段时间内给了我很多麻烦。

Does anyone have the classes that are able to deserialize this italian standard? 是否有人可以反序列化此意大利标准的类? (Don't bother on finding the .xsd to generate it because I've already googled quite a bit and the .xsd is nowhere to be found!) (不要因为找到.xsd而烦恼,因为我已经在谷歌上搜索了很多,而找不到.xsd!)

Thanks in advance. 提前致谢。

The three child elements of the root element in the same namespace as the root, the one prefixed RISPOSTASDD : 根元素的三个子元素与根在相同的名称空间中,一个子元素以RISPOSTASDD

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RISPOSTASDD:CBISDDStsRptPhyMsg xmlns:HE2E="urn:CBI:xsd:CBIHdrSrv.001.07" xmlns:BODY="urn:CBI:xsd:CBIBdySDDStsRpt.00.01.00" xmlns:SGNT="urn:CBI:xsd:CBISgnInf.001.04" xmlns:RISPOSTASDD="urn:CBI:xsd:CBISDDStsRptPhyMsg.00.01.00" xmlns:LMSG="urn:CBI:xsd:CBISDDStsRptLogMsg.00.01.00" xmlns:HTRT="urn:CBI:xsd:CBIHdrTrt.001.07">
    <RISPOSTASDD:CBIHdrTrt>
        <!-- Nested elements snipped -->
    </RISPOSTASDD:CBIHdrTrt>
    <RISPOSTASDD:CBIHdrSrv>
        <!-- Nested elements snipped -->
    </RISPOSTASDD:CBIHdrSrv>
    <RISPOSTASDD:CBIBdySDDStsRpt>
        <!-- Remaining XML not included in the question -->

Thus your root class needs to be modified as follows: 因此,您的根类需要进行如下修改:

[Serializable, XmlRoot(Namespace = "urn:CBI:xsd:CBISDDStsRptPhyMsg.00.01.00")]
public class CBISDDStsRptPhyMsg
{
    [XmlElement("CBIHdrTrt", Namespace = "urn:CBI:xsd:CBISDDStsRptPhyMsg.00.01.00")]
    public CBIHdrTrt CBIHdrTrt { get; set; }
    [XmlElement("CBIHdrSrv", Namespace = "urn:CBI:xsd:CBISDDStsRptPhyMsg.00.01.00")]
    public CBIHdrSrv CBIHdrSrv { get; set; }
    [XmlElement("CBIBdySDDStsRpt", Namespace = "urn:CBI:xsd:CBISDDStsRptPhyMsg.00.01.00")]
    public CBIBdySDDStsRpt CBIBdySDDStsRpt { get; set; }
}

(Or you could just omit the Namespace = on the properties since it's the same as in the XmlRoot attribute.) (或者,您可以在属性上省略Namespace = ,因为它与XmlRoot属性中的相同)。

There may be other problems, but your question doesn't contain a full mcve (the XML and classes are both incomplete) but at the minimum this looks incorrect. 可能还有其他问题,但是您的问题并不包含完整的mcve (XML和类都不完整),但是至少看起来不正确。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM