0

以下のクラス {0} を以下の xml {1} にシリアル化するにはどうすればよいですか。

したがって、クラス名、プロパティ名は xml と一致する必要があります。

{0}:

[Serializable]
public class ProfileSite
{
    [XmlAttribute("profileId")] 
    public int ProfileId { get; set; }

    [XmlAttribute("siteId")] 
    public int SiteId { get; set; }

    public Link[] Links { get; set; }

    public XElement Deserialize()
    {

    }
}

{1}:

<profileSite profileId="" siteId="">
    <links>
      <link>
        <originalUrl></originalUrl>
        <isCrawled></isCrawled>
        <isBroken></isBroken>
        <isHtmlPage></isHtmlPage>
        <firstAppearedLevel></firstAppearedLevel>
      </link>
    </links>
  </profileSite>

どうもありがとう、

4

2 に答える 2

1
[XmlRoot("profileSite")]
public class ProfileSite
{
    [XmlAttribute("profileId")] 
    public int ProfileId { get; set; }

    [XmlAttribute("siteId")] 
    public int SiteId { get; set; }

    [XmlArray("links"), XmlArrayItem("link")]    
    public Link[] Links { get; set; }
}

それから:

var ser = new XmlSerializer(typeof(ProfileSite));
var site = (ProfileSite) ser.Deserialize(source);
于 2012-05-23T11:24:50.983 に答える
1

Xml...最初のステップは、実体化を制御する関連属性と、属性または要素を持つかどうかをクラスにマークアップすることです。要件は基本的に大文字と小文字を変更し、メイン オブジェクトのプロパティを属性として、すべての子Linkオブジェクトのプロパティを要素として持ちます。

[XmlRoot("profileSite")]
public class ProfileSite
{
    [XmlAttribute("profileId")] 
    public int ProfileId { get; set; }

    [XmlAttribute("siteId")] 
    public int SiteId { get; set; }

    [XmlArray("links"), XmlArrayItem("link")]    
    public Link[] Links { get; set; }

}

public class Link
{
    [XmlElement("originalUrl")]
    public string OriginalUrl{get;set;}
    // You other props here much like the above
}

次に、それをシリアル化するために、結果を出力するためにさまざまな場所を取るXmlSerializer.Serialize多くのオーバーロードがあります。テストには、 を使用できますConsole.Out

XmlSerializer serializer = new XmlSerializer(typeof(ProfileSite));
serializer.Serialize(Console.Out, obj);

xmlns醜い余分な属性を停止する空の名前空間マネージャーを追加することをお勧めします。

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("","");
XmlSerializer serializer = new XmlSerializer(typeof(ProfileSite));
serializer.Serialize(Console.Out, obj,ns);

このサンプル オブジェクトを使用した上記の出力:

var obj = new ProfileSite{
            ProfileId=1,
            SiteId=2,
            Links = new[]{ 
                new Link{OriginalUrl="www.google.com" },
                new Link{OriginalUrl="www.foo.com" }
            }};

これは:

<?xml version="1.0" encoding="utf-8"?>
<profileSite profileId="1" siteId="2">
  <links>
    <link>
      <originalUrl>www.google.com</originalUrl>
    </link>
    <link>
      <originalUrl>www.foo.com</originalUrl>
    </link>
  </links>
</profileSite>

最後に、試してみるための実用的な例を次に示します: http://rextester.com/XCJHD55693

于 2012-05-23T11:37:51.967 に答える