可选项的序列化

时间:2014-08-06 12:23:12

标签: c# xml serialization

我有137个XML文件要反序列化。 每个都包含一个电视频道和广播的节目。 每个程序可能都有一些额外的信息。 例如: 演员,演示者,持续时间,质量,决议,国家制作人等。

所以我有这些选择: 文件中不存在指定的标记。 指定的标签可能存在,但没有值。

如何在类中包含此信息,我要将xml序列化? 我希望所有变种都有一个类。 我创建了一个包含所有可能标记的类。 在VS 2013中自动生成 -

Edit> Paste Special> Paste Xml as a class. 

对于在xml中加入各种标签的程序。 项目可以为空。

[XmlElement (IsNullable = true)]

但是如何告诉程序程序中某些标签可能根本不存在?

我检查了每个文件中标签出现的变体数量。 有34对我来说,将它们作为单独的类生成并且在序列化期间选择要序列化的类是太多了。

编辑1

xml就像这样

<tv>
 <channel>
 <programme>
 <programme>
 <programme>
<tv>

例如,这样的程序可能会发生。我想处理这两件事。

  <programme channel="85" start="20140604080000 +0200" stop="20140604083500 +0200">
    <title>Peaceforce</title>
    <desc>Kopenhaga, rok 2045. Światem wstrząsają kolejne wojny. Pewien cywil prosi żołnierza o zastrzelenie słonia, który wydostał się na wolność. Rozwścieczone zwierzę niszczy i zabija wszystko na swojej drodze. Wg George'a Orwella.</desc>
    <credits>
      <director>Peter Gornstein</director>
      <actor>Cyron Melville</actor>
      <actor>Henning Jensen</actor>
      <actor>André Babikian</actor>
      <actor>Silja Byske</actor>
      <writer>David Sandreuter</writer>
    </credits>
    <date>2010</date>
    <category>10</category>
    <language>PL</language>
    <length units="minutes">19</length>
    <country>Dania</country>
    <video>
      <aspect>16:9</aspect>
    </video>
    <rating system="dvb">
      <value>9</value>
    </rating>
  </programme>

他们来自不同的xml。

  <programme channel="337" start="20140604060000 +0200" stop="20140604090000 +0200">
    <title>Popbudzik</title>
    <desc>Poranny program, w którym emitowana jest głośna i pobudzająca muzyka.</desc>
    <category>60</category>
    <language>PL</language>
    <country>Polska</country>
    <video>
      <aspect>16:9</aspect>
    </video>
    <audio>
      <stereo>stereo</stereo>
    </audio>
    <rating system="dvb">
      <value>9</value>
    </rating>
  </programme>

第二个xml的Xml标头

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tv SYSTEM "xmltv.dtd">
<tv generator-info-name="akpa">
  <channel id="337">
    <display-name>4fun.tv</display-name>
  </channel>

0 个答案:

没有答案