2017-12-05 12 views
0

클래스의 목록을 직렬화 복원C#을 XML은 - I합니다 ('사람'클래스의) 객체의 목록에서 C#을 사용하여 생성되는 XML 문서와 함께 일하고 있어요

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfDeviceInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="DeviceInfoCollection"> 
    <DeviceInfo> 
    <Partition>0</Partition> 
    <SerialID>3117132000001</SerialID> 
    <AzureID>2d680cd1-7320-43a9-87d4-75a2698771a3</AzureID> 
    <FirmwareVersion>3.0.0</FirmwareVersion> 
    </DeviceInfo> 
    <DeviceInfo> 
    <Partition>0</Partition> 
    <SerialID>3117132000002</SerialID> 
    <AzureID>646ca461-9352-4746-9fa6-6308010059fb</AzureID> 
    <FirmwareVersion>1.1.2</FirmwareVersion> 
    </DeviceInfo> 

내 목표는 역 직렬화하는 것입니다 이것은List<DeviceInfo>변수로 되돌아갑니다.

나는 다음과 같은

  var xDoc = XDocument.Load(Application.StartupPath + "/devicesTEST.xml"); 
      if (File.ReadAllText(Application.StartupPath + "/devicesTEST.xml").Length > 0) 
      { 

       var envs = from e in xDoc.Root.Descendants("DeviceInfo") 
          select new DeviceInfo 
          { 
           SerialID = (string)e.Element("SerialID"), 
          }; 
       Manager.Devices = envs.ToList(); 
      } 

을 시도하고 그것은 또 다른 XML 파일에 나를 위해 일하고있어. 이전 믿음

업데이트

는 달리,이 목록은 바로 XML에서 추출한 값으로 생성되지 않는 오류가없는 밝혀졌습니다.

+2

나는 중재자 모자를 착용하고 오프 토픽이되는 많은 의견을 삭제했습니다. 나는 다음과 같이 요약 할 것입니다 : [MCVE == good] (https://stackoverflow.com/help/mcve) –

답변

3

XML 네임 스페이스; 귀하의 XML에서 네임 스페이스는 xmlns="DeviceInfoCollection"에 의해 정의됩니다 - 그러나 귀하의 코드는 비어있는 (기본) 네임 스페이스라고 가정합니다. xml 네임 스페이스가 상속되므로이 네임 스페이스에 전체적으로 알려야합니다.

XNamespace ns = "DeviceInfoCollection"; 
var devices = from e in xDoc.Root.Descendants(ns + "DeviceInfo") 
      select new DeviceInfo 
      { 
       SerialID = (string)e.Element(ns + "SerialID"), 
      }; 

foreach(var device in devices) 
{ 
    Console.WriteLine(device.SerialID); 
} 
+0

다른 사람들이 그것에 대해 울면서 어떻게 또는 왜 내 질문을 이해할 수 있었는지는 모르지만 그것은 분명합니다. 충분한 지식이 있으면 문제를 진단하는 데 너무 많은 세부 사항이 필요하지 않습니다. 이것은 실제로 문제였습니다. 감사. – Anaconda

+0

@Anaconda 나는 이것이 독자에게 얼마나 많은 노력을 주 었는지에 대한 질문이라고 생각한다; 더 읽기 쉽고 질문을 완성할수록 더 많은 사람들이 그것을보고 생각할 수있게 될 것입니다. "오,이게 뭔지 압니다." 질문에 더 많은 해독이 필요한 경우, 안개 속을 씹을 수있는 사람들을 제한하고, b : 그 의미는 사람들이 자신의 대답에 확실한 근처에있을 수 없음을 의미합니다. 내게 의미가있는 –

+0

. 앞으로이 게시물에 첨부 한 리소스를 준수하려고 노력할 것입니다. 성실히 감사 드리겠습니다. – Anaconda