草庐IT

c# - 在 C# 中将 Xml 反序列化为对象

coder 2024-06-30 原文

我有一些要序列化的 XML。我的代码运行没有错误,但是序列化不成功,对象是空的而不是用数据填充。该值只是类型值:{OrangeCdToCollectorz.OrangeCd}。我怀疑我的类(class)定义。这也是我正在序列化的类:

  [Serializable, XmlRoot(ElementName = "Collection")]
  [XmlType("Collection")]
  public class OrangeCd
  {
    [XmlRoot(ElementName = "Artists")]
    public class Artists
    {
      [XmlAttribute(AttributeName = "Various")]
      public string Various { get; set; }
      [XmlElement(ElementName = "Artist")]
      public List<Artist> Artist { get; set; }
      [XmlAttribute(AttributeName = "Modified")]
      public string Modified { get; set; }
    }

    [XmlRoot(ElementName = "Genres")]
    public class Genres
    {
      [XmlElement(ElementName = "Genre")]
      public List<string> Genre { get; set; }
      [XmlAttribute(AttributeName = "Modified")]
      public string Modified { get; set; }
    }

    [XmlRoot(ElementName = "ReleaseDate")]
    public class ReleaseDate
    {
      [XmlAttribute(AttributeName = "Encoded")]
      public string Encoded { get; set; }
      [XmlText]
      public string Text { get; set; }
    }

    [XmlRoot(ElementName = "Credit")]
    public class Credit
    {
      [XmlElement(ElementName = "Name")]
      public string Name { get; set; }
      [XmlElement(ElementName = "Role")]
      public string Role { get; set; }
    }

    [XmlRoot(ElementName = "Musicians")]
    public class Musicians
    {
      [XmlElement(ElementName = "Credit")]
      public List<Credit> Credit { get; set; }
    }

    [XmlRoot(ElementName = "Track")]
    public class Track
    {
      [XmlElement(ElementName = "Artist")]
      public string Artist { get; set; }
      [XmlElement(ElementName = "Title")]
      public string Title { get; set; }
      [XmlAttribute(AttributeName = "Number")]
      public string Number { get; set; }
      [XmlAttribute(AttributeName = "Frames")]
      public string Frames { get; set; }
      [XmlAttribute(AttributeName = "Time")]
      public string Time { get; set; }
      [XmlElement(ElementName = "Comment")]
      public string Comment { get; set; }
      [XmlElement(ElementName = "File")]
      public File File { get; set; }
      [XmlAttribute(AttributeName = "Bitrate")]
      public string Bitrate { get; set; }
    }

    [XmlRoot(ElementName = "Tracks")]
    public class Tracks
    {
      [XmlElement(ElementName = "Track")]
      public List<Track> Track { get; set; }
    }

    [XmlRoot(ElementName = "Volume")]
    public class Volume
    {
      [XmlElement(ElementName = "Tracks")]
      public Tracks Tracks { get; set; }
      [XmlAttribute(AttributeName = "ID")]
      public string ID { get; set; }
      [XmlAttribute(AttributeName = "Frames")]
      public string Frames { get; set; }
      [XmlAttribute(AttributeName = "Time")]
      public string Time { get; set; }
    }

    [XmlRoot(ElementName = "Volumes")]
    public class Volumes
    {
      [XmlElement(ElementName = "Volume")]
      public Volume Volume { get; set; }
    }

    [XmlRoot(ElementName = "Album")]
    public class Album
    {
      [XmlElement(ElementName = "Artists")]
      public Artists Artists { get; set; }
      [XmlElement(ElementName = "Title")]
      public string Title { get; set; }
      [XmlElement(ElementName = "Year")]
      public string Year { get; set; }
      [XmlElement(ElementName = "Genres")]
      public Genres Genres { get; set; }
      [XmlElement(ElementName = "Category")]
      public string Category { get; set; }
      [XmlElement(ElementName = "Format")]
      public string Format { get; set; }
      [XmlElement(ElementName = "Comment")]
      public string Comment { get; set; }
      [XmlElement(ElementName = "RefNo")]
      public string RefNo { get; set; }
      [XmlElement(ElementName = "ReleaseDate")]
      public ReleaseDate ReleaseDate { get; set; }
      [XmlElement(ElementName = "Label")]
      public string Label { get; set; }
      [XmlElement(ElementName = "CatalogNo")]
      public string CatalogNo { get; set; }
      [XmlElement(ElementName = "Country")]
      public string Country { get; set; }
      [XmlElement(ElementName = "Location")]
      public string Location { get; set; }
      [XmlElement(ElementName = "Musicians")]
      public Musicians Musicians { get; set; }
      [XmlElement(ElementName = "Volumes")]
      public Volumes Volumes { get; set; }
      [XmlAttribute(AttributeName = "ID")]
      public string ID { get; set; }
      [XmlAttribute(AttributeName = "Modified")]
      public string Modified { get; set; }
      [XmlAttribute(AttributeName = "Created")]
      public string Created { get; set; }
      [XmlAttribute(AttributeName = "IsCompilation")]
      public string IsCompilation { get; set; }
      [XmlAttribute(AttributeName = "Icon")]
      public string Icon { get; set; }
      [XmlAttribute(AttributeName = "Frames")]
      public string Frames { get; set; }
      [XmlAttribute(AttributeName = "Time")]
      public string Time { get; set; }
      [XmlElement(ElementName = "Path")]
      public string Path { get; set; }
    }

    [XmlRoot(ElementName = "File")]
    public class File
    {
      [XmlAttribute(AttributeName = "Size")]
      public string Size { get; set; }
      [XmlText]
      public string Text { get; set; }
    }

    [XmlRoot(ElementName = "All")]
    public class All
    {
      [XmlElement(ElementName = "Album")]
      public List<Album> Album { get; set; }
    }

    [XmlRoot(ElementName = "Albums")]
    public class Albums
    {
      [XmlElement(ElementName = "All")]
      public All All { get; set; }
    }

    [XmlRoot(ElementName = "Artist")]
    public class Artist
    {
      [XmlElement(ElementName = "Name")]
      public string Name { get; set; }
      [XmlElement(ElementName = "SortName")]
      public string SortName { get; set; }
    }

    [XmlRoot(ElementName = "Formats")]
    public class Formats
    {
      [XmlElement(ElementName = "Format")]
      public List<string> Format { get; set; }
      [XmlAttribute(AttributeName = "Modified")]
      public string Modified { get; set; }
    }

    [XmlRoot(ElementName = "Categories")]
    public class Categories
    {
      [XmlElement(ElementName = "Category")]
      public List<string> Category { get; set; }
      [XmlAttribute(AttributeName = "Modified")]
      public string Modified { get; set; }
    }

    [XmlRoot(ElementName = "Statuses")]
    public class Statuses
    {
      [XmlElement(ElementName = "Status")]
      public List<string> Status { get; set; }
      [XmlAttribute(AttributeName = "Modified")]
      public string Modified { get; set; }
    }

    [XmlRoot(ElementName = "Locations")]
    public class Locations
    {
      [XmlElement(ElementName = "Location")]
      public List<string> Location { get; set; }
      [XmlAttribute(AttributeName = "Modified")]
      public string Modified { get; set; }
    }

    [XmlRoot(ElementName = "Sources")]
    public class Sources
    {
      [XmlElement(ElementName = "Source")]
      public List<string> Source { get; set; }
      [XmlAttribute(AttributeName = "Modified")]
      public string Modified { get; set; }
    }

    [XmlRoot(ElementName = "Generations")]
    public class Generations
    {
      [XmlElement(ElementName = "Generation")]
      public List<string> Generation { get; set; }
      [XmlAttribute(AttributeName = "Modified")]
      public string Modified { get; set; }
    }

    [XmlRoot(ElementName = "Qualities")]
    public class Qualities
    {
      [XmlElement(ElementName = "Quality")]
      public List<string> Quality { get; set; }
      [XmlAttribute(AttributeName = "Modified")]
      public string Modified { get; set; }
    }

    [XmlRoot(ElementName = "Conditions")]
    public class Conditions
    {
      [XmlElement(ElementName = "Condition")]
      public List<string> Condition { get; set; }
      [XmlAttribute(AttributeName = "Modified")]
      public string Modified { get; set; }
    }

    [XmlRoot(ElementName = "Packagings")]
    public class Packagings
    {
      [XmlElement(ElementName = "Packaging")]
      public List<string> Packaging { get; set; }
      [XmlAttribute(AttributeName = "Modified")]
      public string Modified { get; set; }
    }

    [XmlRoot(ElementName = "Collection")]
    public class Collection
    {
      [XmlElement(ElementName = "Albums")]
      public Albums Albums { get; set; }
      [XmlElement(ElementName = "Artists")]
      public Artists Artists { get; set; }
      [XmlElement(ElementName = "Formats")]
      public Formats Formats { get; set; }
      [XmlElement(ElementName = "Categories")]
      public Categories Categories { get; set; }
      [XmlElement(ElementName = "Genres")]
      public Genres Genres { get; set; }
      [XmlElement(ElementName = "Statuses")]
      public Statuses Statuses { get; set; }
      [XmlElement(ElementName = "Locations")]
      public Locations Locations { get; set; }
      [XmlElement(ElementName = "Sources")]
      public Sources Sources { get; set; }
      [XmlElement(ElementName = "Generations")]
      public Generations Generations { get; set; }
      [XmlElement(ElementName = "Qualities")]
      public Qualities Qualities { get; set; }
      [XmlElement(ElementName = "Conditions")]
      public Conditions Conditions { get; set; }
      [XmlElement(ElementName = "Packagings")]
      public Packagings Packagings { get; set; }
      [XmlAttribute(AttributeName = "Version")]
      public string Version { get; set; }
    }
  }

这是我的代码,尝试使用几种众所周知的技术对同一 XML 进行反序列化,既作为字符串 const,也来自文件:

  XmlSerializer serializer = new XmlSerializer(typeof(OrangeCd));
  using (TextReader reader = new StringReader(testData))
  {
    OrangeCd orangeCd = (OrangeCd)serializer.Deserialize(reader);
  }

  // Show the dialog and get result.
  DialogResult result = openFileDialog1.ShowDialog();
  if (result == DialogResult.OK) // Test result.
  {
    string file = openFileDialog1.FileName;
    try
    {
      var ser = new XmlSerializer(typeof(OrangeCd));
      using (var reader = XmlReader.Create(file))
      {
        var wrapper = (OrangeCd)ser.Deserialize(reader);
        XmlDocument _Doc = new XmlDocument();
        _Doc.Load(file);

        XmlSerializer deserializer = new XmlSerializer(typeof(OrangeCd));
        using (TextReader textReader = new StringReader(_Doc.OuterXml))
        {
          OrangeCd XmlData = (OrangeCd)deserializer.Deserialize(textReader);
        }


        ser = new XmlSerializer(typeof(OrangeCd));
        wrapper = (OrangeCd)ser.Deserialize(new StringReader(_Doc.OuterXml));

        _Doc = new XmlDocument();
        _Doc.Load(file);
        ser = new XmlSerializer(typeof(OrangeCd));
        wrapper = (OrangeCd)ser.Deserialize(new XmlNodeReader(_Doc.DocumentElement));
      }
    }
    catch (IOException ioException)
    {
      Console.WriteLine(ioException.Message); // <-- For debugging use.
    }
  }

这是源 XML 的示例

<?xml version="1.0" encoding="UTF-8"?>
<Collection Version="1.0">
<Albums>
    <All>
        <Album ID="CACDFB69814A4B2D" Modified="5192EB05" Created="5192EB06" IsCompilation="1" Icon="6" Frames="318975" Time="1:10:53">
            <Artists Various="1"/>
            <Title>Hava Narghile Vol. 1</Title>
            <Year>2001</Year>
            <Genres>
                <Genre>Folk, World, &amp; Country</Genre>
                <Genre>Rock</Genre>
            </Genres>
            <Category>rock</Category>
            <Format>CDR</Format>
            <Comment></Comment>
            <RefNo>V-00300</RefNo>
            <ReleaseDate Encoded="65000000">2001</ReleaseDate>
            <Label>Bacchus Archives</Label>
            <CatalogNo>BA1162</CatalogNo>
            <Country>US</Country>
            <Location>Avant-Garde: Violin</Location>
            <Musicians>
                <Credit>
                    <Name>Suzy Splab</Name>
                    <Role>Artwork</Role>
                </Credit>
                <Credit>
                    <Name>Gökhan Aya</Name>
                    <Role>Compilation Producer</Role>
                </Credit>
                <Credit>
                    <Name>Jay Dobis</Name>
                    <Role>Compilation Producer</Role>
                </Credit>
            </Musicians>
            <Volumes>
                <Volume ID="EFA30400" Frames="318975" Time="1:10:53">
                    <Tracks>
                        <Track Number="01" Frames="10125" Time="2:15">
                            <Artist>Silûetler</Artist>
                            <Title>Lorke Lorke</Title>
                        </Track>
                        <Track Number="02" Frames="12150" Time="2:42">
                            <Artist>Kaygisizlar</Artist>
                            <Title>Sasirdim (Short Circuit)</Title>
                        </Track>
                        <Track Number="03" Frames="11250" Time="2:30">
                            <Artist>Mavi Isiklar</Artist>
                            <Title>Iyi Düsün Tasin (For Your Information)            </Title>
                        </Track>
                        <Track Number="04" Frames="10800" Time="2:24">
                            <Artist>Haramiler</Artist>
                            <Title>Çamlica Yolunda</Title>
                        </Track>
                        <Track Number="05" Frames="18000" Time="4:00">
                            <Artist>Yabancilar</Artist>
                            <Title>Agit</Title>
                        </Track>
                        <Track Number="06" Frames="15375" Time="3:25">
                            <Artist>Apaslar</Artist>
                            <Title>Gilgamis</Title>
                        </Track>
                        <Track Number="07" Frames="11175" Time="2:29">
                            <Artist>Les Mogol</Artist>
                            <Title>Hard Work</Title>
                        </Track>
                        <Track Number="08" Frames="18300" Time="4:04">
                            <Artist>Erkin Koray</Artist>
                            <Title>Anma Arkadas</Title>
                        </Track>
                        <Track Number="09" Frames="12600" Time="2:48">
                            <Artist>Baris Manço &amp; Kaygisizlar</Artist>
                            <Title>Flower Of Love</Title>
                        </Track>
                        <Track Number="10" Frames="14850" Time="3:18">
                            <Artist>Erkut Taçkin &amp; Okan Dincer &amp; Kontrastlar</Artist>
                            <Title>Mühür Gözlüm</Title>
                        </Track>
                        <Track Number="11" Frames="22950" Time="5:06">
                            <Artist>Çagrisim</Artist>
                            <Title>Divane Gönlüm</Title>
                        </Track>
                        <Track Number="12" Frames="13875" Time="3:05">
                            <Artist>Baris Manço &amp; Kaygisizlar</Artist>
                            <Title>Trip (Fairground)</Title>
                        </Track>
                        <Track Number="13" Frames="16800" Time="3:44">
                            <Artist>Les Mogol</Artist>
                            <Title>Berkay Oyun Havasi</Title>
                        </Track>
                        <Track Number="14" Frames="13800" Time="3:04">
                            <Artist>Bunalim</Artist>
                            <Title>Basak Saçlim</Title>
                        </Track>
                        <Track Number="15" Frames="16500" Time="3:40">
                            <Artist>Üç Hürel</Artist>
                            <Title>...Ve Olüm</Title>
                        </Track>
                        <Track Number="16" Frames="17550" Time="3:54">
                            <Artist>Erkin Koray &amp; Ter</Artist>
                            <Title>Hor Görme Garibi</Title>
                        </Track>
                        <Track Number="17" Frames="15900" Time="3:32">
                            <Artist>Baris Manço</Artist>
                            <Title>Ben Bilirim</Title>
                        </Track>
                        <Track Number="18" Frames="12375" Time="2:45">
                            <Artist>Koray Oktay</Artist>
                            <Title>Vefasiz Dost</Title>
                        </Track>
                        <Track Number="19" Frames="13350" Time="2:58">
                            <Artist>Ersen</Artist>
                            <Title>Sor Kendine</Title>
                        </Track>
                        <Track Number="20" Frames="10425" Time="2:19">
                            <Artist>Melih Faruk Serdar Saygun</Artist>
                            <Title>Gurbet Acisi</Title>
                        </Track>
                        <Track Number="21" Frames="19800" Time="4:24">
                            <Artist>Erkin Koray</Artist>
                            <Title>Saskin</Title>
                        </Track>
                        <Track Number="22" Frames="11025" Time="2:27">
                            <Artist>Gökçen Kaynatan</Artist>
                            <Title>Pencerenin Perdesini</Title>
                        </Track>
                    </Tracks>
                </Volume>
            </Volumes>
        </Album>
        <Album ID="504B700C9EEAF33B" Modified="4B80B794" Created="4B80B794" Icon="1" Frames="128775" Time="28:37">
            <Artists>
                <Artist>The Minds</Artist>
            </Artists>
            <Title>Plastic Girls</Title>
            <Year>2003</Year>
            <Genres></Genres>
            <Category>rock</Category>
            <Format>CD</Format>
            <RefNo>T-0340</RefNo>
            <ReleaseDate Encoded="67000000">2003</ReleaseDate>
            <Location>Avant-Garde: Violin</Location>
            <Volumes>
                <Volume ID="75BB4B00" Frames="128775" Time="28:37">
                    <Tracks>
                        <Track Number="01" Frames="12610" Time="2:48">
                            <Title>Hot</Title>
                        </Track>
                        <Track Number="02" Frames="12087" Time="2:41">
                            <Title>Lost In A Crowd</Title>
                        </Track>
                        <Track Number="03" Frames="13833" Time="3:04">
                            <Title>Night Drive</Title>
                        </Track>
                        <Track Number="04" Frames="7997" Time="1:46">
                            <Title>Forbidden Friend</Title>
                        </Track>
                        <Track Number="05" Frames="10633" Time="2:21">
                            <Title>Don't Touch</Title>
                        </Track>
                        <Track Number="06" Frames="9605" Time="2:08">
                            <Title>Plastic Girls</Title>
                        </Track>
                        <Track Number="07" Frames="12040" Time="2:40">
                            <Title>Smash Smash Smash!</Title>
                        </Track>
                        <Track Number="08" Frames="9937" Time="2:12">
                            <Title>Nerves</Title>
                        </Track>
                        <Track Number="09" Frames="7120" Time="1:34">
                            <Title>Sensation</Title>
                        </Track>
                        <Track Number="10" Frames="10733" Time="2:23">
                            <Title>Open The Door</Title>
                        </Track>
                        <Track Number="11" Frames="12072" Time="2:40">
                            <Title>My Place (Adverts)</Title>
                        </Track>
                        <Track Number="12" Frames="10108" Time="2:14">
                            <Title>Sex Vamp</Title>
                        </Track>
                    </Tracks>
                </Volume>
            </Volumes>
        </Album>
    </All>
</Albums>
<Artists Modified="5185B3B0">
    <Artist>
        <Name>Béla Bartók</Name>
        <SortName>Bela Bartok</SortName>
    </Artist>
    <Artist>
        <Name>Béla Fleck &amp; The Flecktones</Name>
        <SortName>Bela Fleck &amp; The Flecktones</SortName>
    </Artist>
    <Artist>
        <Name>Ceoltórí</Name>
        <SortName>Ceoltori</SortName>
    </Artist>
    <Artist>
        <Name>Die Doofen</Name>
        <SortName>Doofen, Die</SortName>
    </Artist>
    <Artist>
        <Name>Les Amis Creole</Name>
        <SortName>Amis Creole, Les</SortName>
    </Artist>
    <Artist>
        <Name>Los Activos</Name>
        <SortName>Activos, Los</SortName>
    </Artist>
    <Artist>
        <Name>Los Dug Dug's</Name>
        <SortName>Dug Dug's, Los</SortName>
    </Artist>
    <Artist>
        <Name>Los Peyotes</Name>
        <SortName>Peyotes, Los</SortName>
    </Artist>
    <Artist>
        <Name>Méav</Name>
        <SortName>Meav</SortName>
    </Artist>
    <Artist>
        <Name>The Minds</Name>
        <SortName>Minds, The</SortName>
    </Artist>
</Artists>
<Formats Modified="4B4BF36D">
    <Format>CD</Format>
    <Format>CDR</Format>
    <Format>2CD</Format>
    <Format>CD+DVD</Format>
    <Format>3&quot; CD</Format>
    <Format>5&quot; CD</Format>
    <Format>CD box set</Format>
    <Format>DVD</Format>
    <Format>MP3</Format>
    <Format>FLAC</Format>
</Formats>
<Categories Modified="00000000">
    <Category>blues</Category>
    <Category>classical</Category>
    <Category>country</Category>
    <Category>data</Category>
    <Category>folk</Category>
    <Category>jazz</Category>
    <Category>misc</Category>
    <Category>newage</Category>
    <Category>reggae</Category>
    <Category>rock</Category>
    <Category>soundtrack</Category>
</Categories>
<Genres Modified="4B513A8A">
    <Genre>A Cappella</Genre>
    <Genre>Acid</Genre>
    <Genre>Acid Jazz</Genre>
    <Genre>Vocal</Genre>
    <Genre>Xmas</Genre>
</Genres>
<Statuses Modified="00000000">
    <Status>Borrowed</Status>
    <Status>Heard</Status>
    <Status>Loaned</Status>
    <Status>Lost</Status>
    <Status>Ordered</Status>
    <Status>Owned</Status>
    <Status>Sold</Status>
    <Status>Want</Status>
</Statuses>
<Locations Modified="556FB027">
    <Location>Jazz: Experimental</Location>
    <Location>Avant-Garde: Violin</Location>
    <Location>Bluegrass/Old Timey: Instrumental</Location>
    <Location>Zappa &amp; Related</Location>
</Locations>
<Sources Modified="00000000">
    <Source>AM Radio</Source>
    <Source>Audience</Source>
    <Source>Bootleg</Source>
    <Source>FM Radio</Source>
    <Source>Internet Radio</Source>
    <Source>Official</Source>
    <Source>Soundtrack</Source>
    <Source>TV</Source>
</Sources>
<Generations Modified="00000000">
    <Generation>1st Gen</Generation>
    <Generation>2nd Gen</Generation>
    <Generation>3rd Gen</Generation>
    <Generation>4th Gen</Generation>
    <Generation>&gt;4th Gen</Generation>
    <Generation>Unknown</Generation>
</Generations>
<Qualities Modified="00000000">
    <Quality>Excellent</Quality>
    <Quality>Good</Quality>
    <Quality>Listenable</Quality>
</Qualities>
<Conditions Modified="00000000">
    <Condition>Acceptable</Condition>
    <Condition>Good</Condition>
    <Condition>Excellent</Condition>
    <Condition>Mint</Condition>
    <Condition>Sealed</Condition>
</Conditions>
<Packagings Modified="00000000">
    <Packaging>CD case</Packaging>
    <Packaging>Slim CD case</Packaging>
    <Packaging>Super CD case</Packaging>
    <Packaging>Double CD case</Packaging>
    <Packaging>DVD case</Packaging>
    <Packaging>Digipak</Packaging>
    <Packaging>Sleeve</Packaging>
</Packagings>
</Collection>

最佳答案

可能您想要做的是反序列化为 OrangeCd.Collection,而不是 OrangeCd

关于c# - 在 C# 中将 Xml 反序列化为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35467531/

有关c# - 在 C# 中将 Xml 反序列化为对象的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  3. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  4. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  5. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  6. Ruby 写入和读取对象到文件 - 2

    好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信

  7. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  8. ruby-on-rails - 未在 Ruby 中初始化的对象 - 2

    我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调

  9. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

  10. ruby-on-rails - 将 Ruby 中的日期/时间格式化为 YYYY-MM-DD HH :MM:SS - 2

    这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build

随机推荐