【问题标题】:C# Deserialize XML with missing tags [duplicate]C#反序列化缺少标签的XML [重复]
【发布时间】:2020-01-30 20:43:12
【问题描述】:

我有问题。我有以下 XML:

<Data>
    <Images>
        <Image>
            <Id></Id>
            <Name></Name>
        </Image>
        <Image>
            <Id></Id>
            <Name></Name>
        </Image>
    </Images>
</Data>

还有以下类:

[XmlRoot("Data")]
public class MyData
{
    [XmlArray("Images")]
    [XmlArrayItem("Image")]
    public List<myImage> Images { get; } = new List<myImage>();
}

public class myImage
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ImageSource imageSource { get; set; }
}

但是当我使用以下方法反序列化 XML 时:

try
{
    var ser = new XmlSerializer(typeof(MyData));
    var data = (MyData)ser.Deserialize(new StringReader(xmlString));

    App.lstAlbums = data.Albums;
    App.lstFotos = data.Fotos;
    App.lstFormaten = data.Formaten;
}
catch (Exception e)
{
    //Give Error
}

我收到以下错误:There was an error reflecting type 'MyApp.Models.MyData' 我收到此错误的原因是因为在 XML 中我没有 imageSource 的标签,而它在类中。如何反序列化 XML 与 imageSource 仍在我的类中,但不在 XML 中?

【问题讨论】:

  • 您还缺少一些结束标签,因此它不是有效的 XML。
  • 很抱歉,我的代码中有有效的 XML。我马上改!
  • 您确定是因为缺少标签吗?我原以为它只会反序列化它可以反序列化的内容,并且该属性将只是null。如果你注释掉 imageSource 你是说它工作正常?
  • 是的,我已经将 imageSource 注释掉了,然后没有崩溃,但是我需要 imageSource,所以这就是问题
  • 事实上我会说这是XmlSerializer - There was an error reflecting type的副本,同意吗?

标签: c# xml parsing serialization


【解决方案1】:

就像@MohammedSAJID 和@dbc 已经说过的那样,我必须将Ignore 标记添加到XML 中未提供的类中的字段中。感谢您的帮助!

【讨论】:

    【解决方案2】:

    您应该能够使用 DataMember 属性来指定您的哪些属性将被序列化(或从文件中加载),请参见下面的链接。

    https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.datamemberattribute?view=netframework-4.8

    【讨论】:

    • DataMember 用于DataContractSerializer,但 OP 使用的是XmlSerializer,所以这不起作用。
    • 抱歉,我认为 XmlSerializer 有一个 [XmlIgnore] 属性
    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多