0

のリストを含むシリアル化されたオブジェクトのXMLを返すRESTサービスがあり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; }
    }
}

このオブジェクトがシリアル化されると、XMLが生成され、次のように送信されます。

<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> 

これにより、オブジェクトの逆シリアル化が失敗します。着替えたら

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

<int>107</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);
    }
4

2 に答える 2

3

適用されているのは xml 名前空間です

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

逆シリアル化中に名前空間を考慮する必要があります。

于 2012-11-01T18:56:46.600 に答える
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();
于 2012-11-01T19:10:38.603 に答える