簡體   English   中英

C#XMLSerializer返回null

[英]c# XMLSerializer returns null

private ResultReferences<T> GetList<T>(string result) where T : class
{
    TextReader reader = new StringReader(result);
    XmlSerializer serializer = new XmlSerializer(typeof(ResultReferences<T>));
    ResultReferences<T> response = (ResultReferences<T>)serializer.Deserialize(reader);
    return response;
}

這是解析字符串xml的函數:

這是我的xml字符串:

<?xml version="1.0" encoding="UTF-8"?>
<result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/some-api/ getCurrencyRate.xsd">
    <rates date="2015-07-07">
        <item cur1="USD" cur2="RUR">57.8215</item>
        <item cur1="EUR" cur2="RUR">63.9852</item>
        <item cur1="EUR" cur2="USD">1.1177</item>     
        <item cur1="USD" cur2="EUR">0.9037</item>
    </rates>
</result>

正好在一行中:

        ResultReferences<T> response = (ResultReferences<T>)serializer.Deserialize(reader);

返回null,為什么呢? 我的xml錯誤嗎?

這是序列化的代碼:

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

namespace mynamespace
{
    [XmlType(TypeName = "currency")]
    public class oCurrency
    {
        [XmlAttribute]
        public long id { get; set; }
        [XmlAttribute]
        public string name { get; set; }
    }
}

這是與您發布的XML相對應的C#代碼:

using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace Xml2CSharp
{
    [XmlRoot(ElementName="item")]
    public class Item {
        [XmlAttribute(AttributeName="cur1")]
        public string Cur1 { get; set; }
        [XmlAttribute(AttributeName="cur2")]
        public string Cur2 { get; set; }
        [XmlText]
        public string Text { get; set; }
    }

    [XmlRoot(ElementName="rates")]
    public class Rates {
        [XmlElement(ElementName="item")]
        public List<Item> Item { get; set; }
        [XmlAttribute(AttributeName="date")]
        public string Date { get; set; }
    }

    [XmlRoot(ElementName="result")]
    public class Result {
        [XmlElement(ElementName="rates")]
        public Rates Rates { get; set; }
        [XmlAttribute(AttributeName="xsi", Namespace="http://www.w3.org/2000/xmlns/")]
        public string Xsi { get; set; }
        [XmlAttribute(AttributeName="schemaLocation", Namespace="http://www.w3.org/2001/XMLSchema-instance")]
        public string SchemaLocation { get; set; }
    }
}

當然是生成的; 這就是為什么它如此精確的原因。 無論如何,它與您提供的C#類幾乎沒有相似之處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM