XML возвращает NULL на XmlSerializer. Десериализация Do tNet Core C# (консольное приложение) - PullRequest
0 голосов
/ 28 апреля 2020

Я знаю, что этот вопрос не нов, но после довольно продолжительного поиска я решил обратиться за помощью здесь. Моя XML десериализация всегда равна нулю, и я хотел бы, чтобы ваши мысли о моем коде.

private static bool MyJson(string mxl)
{
   XmlRootAttribute xRoot = new XmlRootAttribute();
                xRoot.ElementName = "Client";
                xRoot.IsNullable = true;
                var serializer = new XmlSerializer(typeof(MyDTO), xRoot);
                MyDTO result;
                using (TextReader reader = new StreamReader(xml))
                {
                   result = serializer.Deserialize(reader) as MyDTO;
                }
...
}

Мой XML

<Client>
    <References>
        <Reference>TE01234</Reference>
    </References>
    <Intro>
        <Name>Test</Name>
    </Intro>
    <Details>
        <Claimant>
            <Title>Mr</Title>
            <FirstName>Cxxx</FirstName>
            <Surname>Msyy</Surname>
        </Claimant>
        <Claimant2>
            <Title2>Mrs</Title2>
            <FirstName2>Xmsxx</FirstName2>
            <Surname2>Cktol</Surname2>
        </Claimant2>
    </Details>
</Client>

Моя модель

public class MyDTO
{
   public string Reference {get;set;}
   public string Name {get;set;}
   public string Title {get;set;}
   public string FirstName {get;set;}
   public string Surname {get;set;}
   public string Title2 {get;set;}
   public string FirstName2 {get;set;}
   public string Surname2 {get;set;}
}

Результат; всегда нулевой.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 28 апреля 2020

Использование xml Linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;


namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            List<MyDTO> dtos = doc.Descendants("Client").Select(x => new MyDTO()
            {
                Reference = (string)x.Descendants("Reference").FirstOrDefault(),
                Name = (string)x.Descendants("Name").FirstOrDefault(),
                Title = (string)x.Descendants("Title").FirstOrDefault(),
                FirstName = (string)x.Descendants("FirstName").FirstOrDefault(),
                Surname = (string)x.Descendants("Surname").FirstOrDefault(),
                Title2 = (string)x.Descendants("Title2").FirstOrDefault(),
                FirstName2 = (string)x.Descendants("FirstName2").FirstOrDefault(),
                Surname2 = (string)x.Descendants("Surname2").FirstOrDefault()
            }).ToList();

        }
    }
    public class MyDTO
    {
       public string Reference {get;set;}
       public string Name {get;set;}
       public string Title {get;set;}
       public string FirstName {get;set;}
       public string Surname {get;set;}
       public string Title2 {get;set;}
       public string FirstName2 {get;set;}
       public string Surname2 {get;set;}
    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...