【问题标题】:C# XmlSerializer: Deserialize empty GUID value from XML file [duplicate]C# XmlSerializer:反序列化 XML 文件中的空 GUID 值 [重复]
【发布时间】:2016-09-29 07:13:28
【问题描述】:

我有一个包含如下 XML 的配置文件:

<XmlParameter Title="Analysis">
    <ProcedureName>XmlParameterAnalysisGetFirst</ProcedureName>
    <ProcedureGroupId/>
    <Returns>Table</Returns>
    <Params>
        <Param OrderKey="0" Name="xmlParameters">%xmlParameters%</Param>
    </Params>
</XmlParameter>

我使用XmlSerializer 类在运行时将文件反序列化为XmlParameter 类型的对象:

public class XmlParameter {
    [XmlAttribute]
    public string Title { get; set; }

    public string ProcedureName { get; set; }

    [XmlElement(IsNullable=true)]
    public Guid? ProcedureGroupId { get; set; }

    public string Returns { get; set; }

    public List<XmlCLRParam> Params { get; set; }
}

但是当我尝试用这个代码块反序列化文件时:

var deserializer = new XmlSerializer(typeof(XmlParameter);
var reader = new StreamReader(this.FilePath);
var obj  = deserializer.Deserialize(reader);

我收到了System.InvalidOperationException

XML 文档中的错误。 ---> Sytem.Format.Exception: 未知的 Guid 格式。

我的问题是是否有办法从 XML 文件中反序列化 nullable GUID 值

【问题讨论】:

  • 为了简化您的问题,不要使用可为空的 Guid,而是使用 Guid.Empty。这等于 0000-000... 这不是有效的 Guid,因此可以进行检查。

标签: c# xml xmlserializer


【解决方案1】:

Nullable 表示如果 xml 文件中不存在,POCO 字段将获得空引用...

你的 xml 格式错误:删除这个:

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多