2012-11-01 4 views
0

int리스트를 포함하는 직렬화 된 오브젝트의 XML을 리턴하는 REST 서비스가 있습니다. 목적 코드는이 오브젝트를 생성하고 전송되는 XML 직렬화int리스트를 포함하고있는 오브젝트를 직렬화 해제

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

namespace All.Tms.Dto 
{ 
    [XmlRoot(Namespace = "http://schemas.datacontract.org/2004/07/All.Tms.Dto")] 
    public class ReadSensorsForVehicleIdResponse 
    { 
     public List<int> sensorIdList { get; set; } 
    } 
} 

미만 :

<ReadSensorsForVehicleIdResponse xmlns="http://schemas.datacontract.org/2004/07/All.Tms.Dto"  xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><sensorIdList xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays"><a:int>107</a:int></sensorIdList></ReadSensorsForVehicleIdResponse> 

문제를 INT 값

<a:int>107</a:int> 
직렬화 점이다

이로 인해 개체의 deserialize가 실패합니다. 나는 제대로

<int>107</int> 

객체 직렬화에

<a:int>107</a:int> 

을 변경하는 경우. 이 방법으로 int 값이 직렬화되는 이유가 있습니까?이 문제를 어떻게 해결할 수 있습니까? 여기

내가

public static T Deserialize<T>(string xml) where T : class 
    { 
     var serializer = new XmlSerializer(typeof(T)); 

     var stream = new MemoryStream(Encoding.UTF8.GetBytes(xml)); 

     var reader = XmlReader.Create(stream); 

     return (T)serializer.Deserialize(reader); 
    } 

답변

2

Linq To Xml

var xDoc = XDocument.Parse(xmlstring); //or XDocument.Load(fileName) 
XNamespace ns = "http://schemas.microsoft.com/2003/10/Serialization/Arrays"; 

var a = xDoc.Descendants(ns + "int") 
      .Select(x => (int)x) 
      .ToList(); 
+0

위의 질문에 역 직렬화에 사용하는 코드를 추가했습니다. 이 코드는 프로젝트 전체에서 사용되며 사용자가 제안한 방법을 사용하여 비 직렬화 할 객체를 변경하는 데 많은 노력이 필요합니다. – user65439

+0

나는 문제가있는 객체를 비 직렬화하는 함수에 대한 제안 된 솔루션을 구현했습니다. 제안 해 주셔서 감사합니다. +1 – user65439

3

그것은

xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays" 

당신은 당신의 직렬화 복원시에 네임 스페이스를 설명 할 필요가 적용되고있는 XML 네임 스페이스를 직렬화하는 데 사용하는 코드입니다.

+0

를 사용하기 쉬운 할 어떻게 할이 객체 클래스 위에서 주어진. 나는 xmlns : a = "http://schemas.microsoft.com/2003/10/Serialization/Arrays"가 문제라고 생각하지 않는다. 앞에서 말한 것처럼 int 태그 내에서 'a :'문자를 제거하면 객체가 비 직렬화됩니다. – user65439

+0

해당 네임 스페이스가 int에 적용되므로 a가 추가되고 있습니다. xmlns : a 어떻게 역 직렬화를 시도합니까? –

+0

위 질문에 deserialize하기 위해 사용하는 코드를 추가했습니다 – user65439

관련 문제