0

私は、xmlファイルをほとんど取り、それをC#でシリアル化して、Word文書のフォーマットに使用できるようにするプロジェクトに取り組んでいます。これまでのところ、すべて順調に進んでおり、数千の xml タグを解析し、これまでのところ 86 ページのドキュメントを非常にうまく作成しています。

ただし、ドキュメントが完成する前に行う必要がある最後の 2 つのタグに取り組んでおり、何らかの理由でそれらの 1 つでシリアル化が機能していません。

- <layout_row>
   - <layout_cell type="attribute">
        <attribute_and_presentation attribute="Name" /> 
        <layout_group is_column="true" label_column_width="100" /> 
     </layout_cell>
  </layout_row>

上記は、シリアライズしているxmlコードのサンプルです

using System.Collections;
using System.Xml.Serialization;
using System.Xml.Xsl;
using System.Xml.Schema;
using System.Runtime.Serialization;
using System.Collections.Generic;

[System.Serializable()]
public class layout_cell
{
    [XmlAttribute("type")]
    public string type;

    [XmlElement("attribute_and_presentation")]
    public attribute_and_presentation attribute_and_presentation;

    [XmlElement("layout_group")]
    public layout_group layout_group;
}

[System.Serializable()] 
public class attribute_and_presentation { 
    [XmlAttribute] 
    public string attribute; 
} 
[System.Serializable()] 
public class layout_group { 
    [XmlAttribute("is_column")] 
    public string is_column; 

    [XmlAttribute("label_column_width")] 
    public string label_column_width; 
}

問題は layout_group にあり、何らかの理由でまったくシリアル化されません。私は何時間もこれに取り組んできましたが、明らかに何かを見逃しているに違いないと感じていますが、私の人生では、それを解決することはできません.

このクラスでは、type と attribute_and_presentation の両方が完全に正常にシリアル化されることに注意してください。

4

1 に答える 1

1

あなたはxmlファイルを取り、それをシリアライズすると言いますが、デシリアライズすることを意味すると思います。いずれにせよ、投稿したクラスを使用した双方向の動作例を次に示します。

プロパティを使用する必要があるという他のコメントには同意しますが、それが問題だとは思いません。私の例ではフィールドを使用しています (ほとんどが独自のコードです)。実際、ドキュメントには、次のように問題ないと記載されています。

シリアル化できるアイテム

  • パブリック クラスのパブリック読み取り/書き込みプロパティとフィールド。

例:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        static string xml_to_deserialize = @"
    <layout_cell type=""attribute"">
        <attribute_and_presentation attribute=""Name"" /> 
        <layout_group is_column=""true"" label_column_width=""100"" /> 
    </layout_cell>
";

        static void Main(string[] args)
        {
            var serializer = new System.Xml.Serialization.XmlSerializer(typeof(layout_cell));

            //test desieralization
            using (var stringReader = new StringReader(xml_to_deserialize))
            using (var reader = System.Xml.XmlReader.Create(stringReader))
            {
                var result = serializer.Deserialize(reader);

                result.ToString(); //breakpoint here to examimne
            }


            //test serialization

            var toSerialize = new layout_cell()
            {
                type = "some type",
                attribute_and_presentation = new attribute_and_presentation()
                {
                    attribute = "some attribute"
                },
                layout_group = new layout_group()
                {
                    is_column = "true",
                    label_column_width = "100"
                }
            };

            using (var writer = new System.IO.StringWriter())
            {
                serializer.Serialize(writer, toSerialize);

                Console.WriteLine(writer.ToString());
            }


            Console.WriteLine("done, hit enter.");
            Console.ReadLine();

        }
    }

    [System.Serializable()]
    public class layout_cell
    {
        [XmlAttribute("type")]
        public string type;

        [XmlElement("attribute_and_presentation")]
        public attribute_and_presentation attribute_and_presentation;

        [XmlElement("layout_group")]
        public layout_group layout_group;
    }

    [System.Serializable()] public class attribute_and_presentation
    {
        [XmlAttribute]
        public string attribute;
    }

    [System.Serializable()] public class layout_group
    {
        [XmlAttribute("is_column")] public string is_column;
        [XmlAttribute("label_column_width")] public string label_column_width;
    }
}
于 2013-08-15T00:02:01.903 に答える