首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅将特定节点从Xml反序列化为对象

仅将特定节点从Xml反序列化为对象
EN

Stack Overflow用户
提问于 2019-02-05 05:59:20
回答 2查看 52关注 0票数 0

我正在尝试从Xml中获取特定节点并将其写入到类中。我有这个。

代码语言:javascript
复制
public class TradeMark
{
    [XmlElement]
    public string MarkVerbalElementText { get; set; }
    [XmlElement]
    public int MarkCurrentStatusCode { get; set; }
    [XmlElement]
    public string ExpiryDate { get; set; } = ""; 
}
   static void Main(string[] args)
    {
       XmlSerializer serializer = new XmlSerializer(typeof(TradeMark));
        using (TextReader reader = new StreamReader(pathToImportFile))
        {
            tradeMark = (TradeMark)serializer.Deserialize(reader);
        }
    }

在我的Xml数据中,有比这3个更多的节点。现在,当我运行代码时,它说.是意想不到的。我猜是公元前。它试图反序列化TradeMark类中的所有内容,而不仅仅是这3个Infomartionen。

有人能帮上忙吗?

XML

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<Transaction xmlns="http://euipo.europa.eu/trademark/data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://euipo.europa.eu/trademark/data http://euipo.europa.eu/schemas/trademark/EM-TM-TradeMark-V3-2.xsd">
<TransactionHeader>
        <SenderDetails>
            <RequestProducerDateTime>2018-08-18T15:33:35</RequestProducerDateTime>
        </SenderDetails>
    </TransactionHeader>
<TradeMarkTransactionBody>
<TransactionContentDetails>
<TransactionIdentifier>017690538</TransactionIdentifier>
<TransactionCode>EM-Trade Mark</TransactionCode>
<TransactionData>
<TradeMarkDetails>
<TradeMark operationCode="Insert">
<RegistrationOfficeCode>EM</RegistrationOfficeCode>
<ApplicationNumber>017690538</ApplicationNumber>
<ApplicationDate>2018-01-16</ApplicationDate>
<RegistrationDate>2018-06-14</RegistrationDate>
<ApplicationLanguageCode>en</ApplicationLanguageCode>
<SecondLanguageCode>es</SecondLanguageCode>
<ExpiryDate>2028-01-16</ExpiryDate>
<MarkCurrentStatusCode milestone="23" status="1">Registered</MarkCurrentStatusCode>
<MarkCurrentStatusDate>2018-06-15</MarkCurrentStatusDate>
<KindMark>Individual</KindMark>
<MarkFeature>Figurative</MarkFeature>
<TradeDistinctivenessIndicator>false</TradeDistinctivenessIndicator>
<WordMarkSpecification>
<MarkVerbalElementText>Tiens</MarkVerbalElementText>
</WordMarkSpecification>
EN

回答 2

Stack Overflow用户

发布于 2019-02-05 06:06:45

这很可能是因为您的XML有一个默认的名称空间,而Transaction就在这个名称空间中。您需要使用XmlRootAttribute标记您的类,如下所示:

代码语言:javascript
复制
[XmlRootAttribute("TradeMark", Namespace="http://euipo.europa.eu/trademark/data", 
IsNullable = false)]
public class TradeMark
票数 1
EN

Stack Overflow用户

发布于 2019-02-05 06:03:55

XmlIgnore就是你要找的东西。

MSDN Docs

参见this answer中的说明,因为在序列化时将忽略docs唯一的状态XmlIgnore,但在反序列化时也将忽略。

从您的示例中可以看出:

代码语言:javascript
复制
public class TradeMark
{
    [XmlElement]
    public string MarkVerbalElementText { get; set; }
    [XmlElement]
    public int MarkCurrentStatusCode { get; set; }
    [XmlElement]
    public string ExpiryDate { get; set; } = ""; 
    [XmlIgnore]
    public string IgnoreMe { get; set; } // This will be ignored
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54524935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档