[英]Why does deserializing my packages.config in c# return null values?
我正在嘗試在C#中反序列化我的packages.config文件,但是我得到的Collection始終為null。 如果我的xml文件包含單個屬性集合,是否需要一些特殊的東西?
[Serializable()]
[System.Xml.Serialization.XmlTypeAttribute()]
public class Package
{
[System.Xml.Serialization.XmlAttribute("id")]
public string Id {get;set;}
[System.Xml.Serialization.XmlAttribute("version")]
public string Version {get;set;}
}
[Serializable()]
[System.Xml.Serialization.XmlRoot("packages")]
public class PackageCollection
{
[System.Xml.Serialization.XmlArrayItem("package", typeof(Package))]
public Package[] Packages {get;set;}
}
void Main()
{
var path = "C:\D\packages.config";
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(PackageCollection), new System.Xml.Serialization.XmlRootAttribute("packages"));
StreamReader reader = new StreamReader(file);
var packages2 = (PackageCollection)serializer.Deserialize(reader);
reader.Close();
}
我的packages.config看起來像
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Autofac" version="3.3.1" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="4.0.20710.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="4.0.20710.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Tracing" version="4.0.30506" targetFramework="net45" />
<package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net45" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net45" />
</packages>
在這種情況下,請使用XmlElement:
[Serializable()]
[System.Xml.Serialization.XmlRoot("packages")]
public class PackageCollection
{
[System.Xml.Serialization.XmlElement("package", typeof(Package))]
public Package[] Packages { get; set; }
}
根據包含的測試,此代碼似乎可以根據您的需要運行:
[Serializable()]
[System.Xml.Serialization.XmlTypeAttribute()]
public class Package
{
[System.Xml.Serialization.XmlAttributeAttribute("id")]
public string Id { get; set; }
[System.Xml.Serialization.XmlAttributeAttribute("version")]
public string Version { get; set; }
[System.Xml.Serialization.XmlAttributeAttribute("targetFramework")]
public string TargetFramework { get; set; }
}
[Serializable()]
[System.Xml.Serialization.XmlRoot("packages")]
public class PackageCollection
{
[System.Xml.Serialization.XmlElementAttribute("package")]
public Package[] Packages { get; set; }
}
class Program
{
static void Main()
{
var path = @"C:\packages.config";
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(PackageCollection));
StreamReader reader = new StreamReader(path);
var packages2 = (PackageCollection)serializer.Deserialize(reader);
foreach (Package pkg in packages2.Packages)
{
Console.WriteLine("ID: " + pkg.Id);
Console.WriteLine("Version: " + pkg.Version);
Console.WriteLine("Target Framework: " + pkg.TargetFramework);
Console.WriteLine();
}
reader.Close();
Console.ReadLine();
}
}
正如@Isantipov所提到的, XML架構定義工具(Xsd.exe)-MDSN可以提供幫助。
另請參閱問題如何反序列化XML文檔以獲取一些其他信息,尤其是Marc Gravell的答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.