[英]Trying to deserialize a netcore csproj from XML to Object
I'm trying to deserialise a xml doc into a poco class, obviously, the csproj
files aren't the strictest XML files (missing xml
header`), but they pass all the validation checks.我正在尝试将 xml 文档反序列化为 poco 类,显然,
csproj
文件不是最严格的 XML 文件(缺少xml
标头),但它们通过了所有验证检查。
The error I'm getting is <Project xmlns=''> was not expected.
我得到的错误是
<Project xmlns=''> was not expected.
, and the code to deserialise is below. ,反序列化的代码如下。
Have I missed something blindingly obvious?我是否错过了一些非常明显的东西?
var csProj = projPath.ParsePathToXML<CsProj2.Models.Project>("Project");
public static T ParsePathToXML<T>(this string @this, string root = "")
{
string xml = File.ReadAllText(@this);
XmlSerializer serializer = new XmlSerializer(typeof(T), root);
T result;
using (TextReader reader = new StringReader(xml))
{
result = (T)serializer.Deserialize(reader);
}
return result;
}
[XmlRoot(ElementName = "PropertyGroup")]
public class PropertyGroup
{
[XmlElement(ElementName = "TargetFramework")]
public string TargetFramework { get; set; }
[XmlElement(ElementName = "RuntimeIdentifier")]
public string RuntimeIdentifier { get; set; }
[XmlElement(ElementName = "RuntimeFrameworkVersion")]
public string RuntimeFrameworkVersion { get; set; }
[XmlElement(ElementName = "TargetsForTfmSpecificBuildOutput")]
public string TargetsForTfmSpecificBuildOutput { get; set; }
[XmlElement(ElementName = "PreserveCompilationContext")]
public string PreserveCompilationContext { get; set; }
[XmlElement(ElementName = "AssemblyName")]
public string AssemblyName { get; set; }
[XmlElement(ElementName = "OutputType")]
public string OutputType { get; set; }
[XmlElement(ElementName = "PackageId")]
public string PackageId { get; set; }
[XmlElement(ElementName = "GenerateAssemblyTitleAttribute")]
public string GenerateAssemblyTitleAttribute { get; set; }
[XmlElement(ElementName = "GenerateAssemblyDescriptionAttribute")]
public string GenerateAssemblyDescriptionAttribute { get; set; }
[XmlElement(ElementName = "GenerateAssemblyConfigurationAttribute")]
public string GenerateAssemblyConfigurationAttribute { get; set; }
[XmlElement(ElementName = "GenerateAssemblyCompanyAttribute")]
public string GenerateAssemblyCompanyAttribute { get; set; }
[XmlElement(ElementName = "GenerateAssemblyProductAttribute")]
public string GenerateAssemblyProductAttribute { get; set; }
[XmlElement(ElementName = "GenerateAssemblyCopyrightAttribute")]
public string GenerateAssemblyCopyrightAttribute { get; set; }
[XmlElement(ElementName = "GenerateAssemblyVersionAttribute")]
public string GenerateAssemblyVersionAttribute { get; set; }
[XmlElement(ElementName = "GenerateAssemblyFileVersionAttribute")]
public string GenerateAssemblyFileVersionAttribute { get; set; }
[XmlElement(ElementName = "DocumentationFile")]
public string DocumentationFile { get; set; }
[XmlElement(ElementName = "Authors")]
public string Authors { get; set; }
[XmlElement(ElementName = "PublishWithAspNetCoreTargetManifest")]
public string PublishWithAspNetCoreTargetManifest { get; set; }
[XmlElement(ElementName = "VersionPrefix")]
public string VersionPrefix { get; set; }
[XmlElement(ElementName = "VersionSuffix")]
public string VersionSuffix { get; set; }
[XmlElement(ElementName = "IsPackable")]
public string IsPackable { get; set; }
}
[XmlRoot(ElementName = "Content")]
public class Content
{
[XmlElement(ElementName = "CopyToOutputDirectory")]
public string CopyToOutputDirectory { get; set; }
[XmlAttribute(AttributeName = "Update")]
public string Update { get; set; }
}
[XmlRoot(ElementName = "ItemGroup")]
public class ItemGroup
{
[XmlElement(ElementName = "Content")]
public List<Content> Content { get; set; }
[XmlElement(ElementName = "PackageReference")]
public List<PackageReference> PackageReference { get; set; }
[XmlElement(ElementName = "ProjectReference")]
public ProjectReference ProjectReference { get; set; }
[XmlElement(ElementName = "BuildOutputInPackage")]
public BuildOutputInPackage BuildOutputInPackage { get; set; }
}
[XmlRoot(ElementName = "PackageReference")]
public class PackageReference
{
[XmlAttribute(AttributeName = "Include")]
public string Include { get; set; }
[XmlAttribute(AttributeName = "Version")]
public string Version { get; set; }
}
[XmlRoot(ElementName = "ProjectReference")]
public class ProjectReference
{
[XmlAttribute(AttributeName = "Include")]
public string Include { get; set; }
[XmlAttribute(AttributeName = "PrivateAssets")]
public string PrivateAssets { get; set; }
}
[XmlRoot(ElementName = "BuildOutputInPackage")]
public class BuildOutputInPackage
{
[XmlAttribute(AttributeName = "Include")]
public string Include { get; set; }
}
[XmlRoot(ElementName = "Target")]
public class Target
{
[XmlElement(ElementName = "ItemGroup")]
public ItemGroup ItemGroup { get; set; }
[XmlAttribute(AttributeName = "Name")]
public string Name { get; set; }
[XmlAttribute(AttributeName = "DependsOnTargets")]
public string DependsOnTargets { get; set; }
}
[XmlRoot(ElementName = "Project")]
public class Project
{
[XmlElement(ElementName = "PropertyGroup")]
public List<PropertyGroup> PropertyGroup { get; set; }
[XmlElement(ElementName = "ItemGroup")]
public List<ItemGroup> ItemGroup { get; set; }
[XmlElement(ElementName = "Target")]
public Target Target { get; set; }
[XmlAttribute(AttributeName = "Sdk")]
public string Sdk { get; set; }
}
It seems you need to specify your root element by using XmlRootAttribute.您似乎需要使用 XmlRootAttribute 来指定根元素。 Instead of ... new XmlSerializer(typeof(T), root)
而不是 ... new XmlSerializer(typeof(T), root)
new XmlSerializer(typeof(T), new XmlRootAttribute(root));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.