0

c# を使用して Visual Studio 2008 で作業しています。

「Envelope.xsd」と「Body.xsd」など、2 つの xsd ファイルがあるとします。

xsd.exe を実行して 2 セットのクラスを作成し、"Envelope.cs" と "Body.cs" のようなものを作成します。

2 つのクラスをリンクして (XmlSerializer を使用して) 適切なネストされた xml にシリアル化する方法がわかりません。

私が欲しい: <Envelope><DocumentTitle>Title</DocumentTitle><Body>Body Info</Body></Envelope>

しかし、私は得る: <Envelope><DocumentTitle>Title</DocumentTitle></Envelope><Body>Body Info</Body>

XmlSerializer が目的のネストされた結果を実行できるようにするために、2 つの .cs クラスがどのように見えるべきかを誰かが教えてくれませんか?

どうもありがとう

ポール

4

1 に答える 1

0

これでうまくいくはずです(サンプルコンソールプログラム):

using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;

namespace ConsoleApplication9
{
    [XmlRoot("Envelope")]
    public class EnvelopeClass
    {
        [XmlElement("DocumentTitle")]
        public string DocumentTitle { get; set; }

        [XmlElement("Body")]
        public BodyClass BodyElement { get; set; }
    }

    public class BodyClass
    {
        [XmlText()]
        public string Body { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            EnvelopeClass envelope =
                new EnvelopeClass
                {
                    DocumentTitle = "Title",
                    BodyElement = new BodyClass { Body = "Body Info" }
                };

            XmlSerializer xs = new XmlSerializer(typeof(EnvelopeClass));

            StringBuilder sb = new StringBuilder();
            StringWriter writer = new StringWriter(sb);
            xs.Serialize(writer, envelope);
            Console.WriteLine(sb.ToString());
            Console.ReadLine();
        }
    }
}

結果の出力:

    <?xml version="1.0" encoding="utf-16"?>
    <Envelope 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <DocumentTitle>Title</DocumentTitle>
      <Body>Body Info</Body>
    </Envelope>

お役に立てば幸いです。私の投稿に答えたpleezをマークすることを忘れないでください...:)

于 2010-04-15T17:43:33.663 に答える