【问题标题】:deserialize xml into an array of objects, where each object contains nested classes将 xml 反序列化为对象数组,其中每个对象都包含嵌套类
【发布时间】:2017-08-15 00:02:34
【问题描述】:

所以我无法弄清楚如何做到这一点,我将从我从 rest API 获得的 xml 格式开始(简化)

<exportData encryptedPhrase="stuff" version="1" stVersion="1">
<completeAdministrator>
    <administratorData id="1">
        <name>stuff</name>
        <operations>0</operations>
        <administrativeRole>Some role</administrativeRole>
        <encryptedPassphrase>pass</encryptedPassphrase>
        <isChangePassword>false</isChangePassword>
        <isDualAuthRequired>false</isDualAuthRequired>
        <lastLoginTime>2014-12-23T15:00:27-08:00</lastLoginTime>
        <loginFailureCount>0</loginFailureCount>
        <lastFailureLoginTime>2014-12-23T14:54:42-08:00</lastFailureLoginTime>
        <isLockedOut>false</isLockedOut>
        <lastPasswordChangeTime>2014-12-23T15:04:38-08:00</lastPasswordChangeTime>
        <customAttributes>
            <customProperties>
            </customProperties>
            <localCertificates>
            </localCertificates>
            <partnerCertificates>
            </partnerCertificates>
            <userCertificates>
            </userCertificates>
        </customAttributes>
    </administratorData>
    <businessUnit>bu</businessUnit>
    <parentAdministratorName>admin</parentAdministratorName>
</completeAdministrator>
</exportData>

所以基本上我想要一个包含管理对象列表(completeAdministrator)的主类(exportData),每个管理对象都有一个adminstratordata对象和一个自定义属性对象。

我使用“特殊粘贴”功能让 .Net 为我创建了一个似乎可以工作的类,但是当我使用此代码时,只读入第一项。我该如何进行这项工作?

XmlSerializer deserializer = new XmlSerializer(typeof(AdminData));
FileStream fs = new FileStream(@"C:\Projects\SafeXMLImport\ST 5.2.1 export Data & document\adm.xml", FileMode.Open);
XmlReader reader = new XmlTextReader(fs);
AdminData adminXml = (AdminData)deserializer.Deserialize(reader);

【问题讨论】:

    标签: c# .net xml linq


    【解决方案1】:

    尝试this 创建类,有时 VisualStudio 不知道如何正确创建类。我认为您的 xml 结尾应该与开头相同。

    【讨论】:

      【解决方案2】:

      这就是我最终要做的。我不得不制作一组businessUnits,因为我发现一个条目中可以有多个标签。

                  XDocument doc = XDocument.Load(@"C:\Projects\SafeXMLImport\ST 5.2.1 export Data & document\adm.xml");
      
              List < CompleteAdministrator > adminList =
                  (
                      from c in doc.Root.Elements("completeAdministrator")
                      select new CompleteAdministrator
                      {
                          businessUnits = (from d in c.Elements("businessUnit")
                                           select d.Value).ToArray(), 
                          parentAdministratorName = (string)c.Element("parentAdministratorName"),
                          administratorData =
                          (
                              new AdministratorData
                              {
                                  id = (string)c.Element("administratorData").Attribute("id"),
                                  name = (string)c.Element("administratorData").Element("name"),
                                  operations = (string)c.Element("administratorData").Element("operations"),
                                  administrativeRole = (string)c.Element("administratorData").Element("administrativeRole"),
                                  encryptedPassphrase = (string)c.Element("administratorData").Element("encryptedPassphrase"),
                                  isChangePassword = (string)c.Element("administratorData").Element("isChangePassword"),
                                  isDualAuthRequired = (string)c.Element("administratorData").Element("isDualAuthRequired"),
                                  lastLoginTime = (string)c.Element("administratorData").Element("lastLoginTime"),
                                  loginFailureCount = (string)c.Element("administratorData").Element("loginFailureCount"),
                                  lastFailureLoginTime = (string)c.Element("administratorData").Element("lastFailureLoginTime"),
                                  isLockedOut = (string)c.Element("administratorData").Element("isLockedOut"),
                                  lastPasswordChangeTime = (string)c.Element("administratorData").Element("lastPasswordChangeTime")
                              }
                          )
                      }
                  ).ToList();
      

      【讨论】:

        猜你喜欢
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-15
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        相关资源
        最近更新 更多