簡體   English   中英

嘗試將 netcore csproj 從 XML 反序列化為對象

[英]Trying to deserialize a netcore csproj from XML to Object

我正在嘗試將 xml 文檔反序列化為 poco 類,顯然, csproj文件不是最嚴格的 XML 文件(缺少xml標頭),但它們通過了所有驗證檢查。

我得到的錯誤是<Project xmlns=''> was not expected. ,反序列化的代碼如下。

我是否錯過了一些非常明顯的東西?

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

您似乎需要使用 XmlRootAttribute 來指定根元素。 而不是 ... new XmlSerializer(typeof(T), root)

new XmlSerializer(typeof(T), new XmlRootAttribute(root));

暫無
暫無

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

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