2011-07-13 5 views
2

私はクラスモデルを設計しています。クラスモデルのシリアライズされたメッセージは、次の形式である必要があります。C#クラスモデルを作成してXMLシリアル化リクエストを所定の形式で取得するにはどうすればよいですか?

<?xml version="1.0" encoding="UTF-8" ?> 
<Request> 
    <Name>TesterScript</Name> 
    <ID>CD_20110628133820576</ID> 
    <Type> 
    <ItemId>191_20110628T133821</ItemId> 
    <ShopId>MyBCShop</ShopId> 
    <MessageXml> 
    <ChildMessage> 
     This is my message 
    </ChildMessage> 
    </MessageXml> 
    </Type> 
    <SentTime>2011-06-30T15:27:06-07:00</SentTime> 
</Request> 

どのようにクラスを設計しますか? また、提案されたクラスモデルを上記のXMLメッセージにシリアル化する最善の方法は何ですか?私は使用を考えています:

// Serialize the request 
XmlSerializer xs = new XmlSerializer(typeof(Request)); 
StringWriter sw = new StringWriter(); 
xs.Serialize(sw, dispatchRequest); 
string xml = sw.ToString(); 
return new xml; 

これは最も適した方法ですか?

+0

提供されたXMLは整形式ではありません。 –

+0

テスタースクリプト?またはテスタースクリプト? – shenhengbin

+0

は改訂されました。その名前タグ – InfoLearner

答えて

1

私の解決策が役に立つと願っています....

XMLコンテンツ(私はあなたのポストに間違った何かがあると思う...)

<?xml version="1.0" encoding="utf-8" ?> 
<Request> 
    <Name>TesterScript</Name> 
    <ID>CD_20110628133820576</ID> 
    <Type> 
    <ItemId>191_20110628T133821</ItemId> 
    <ShopId>BARCGB2L</ShopId> 
    <MessageXml> 
     <ChildMessage> 
     This is my message 
     </ChildMessage> 
    </MessageXml> 
    </Type> 
    <SentTime>2011-06-30T15:27:06-07:00</SentTime> 
</Request> 

クラス:

[XmlRoot("Request")] 
public class SampleClass 
{ 
    public string Name { get; set; } 
    public string ID { get; set; } 
    [XmlElement("Type")] 
    public SubClass SC { get; set; } 
    public string SentTime { get; set; } 

    public class SubClass 
    { 
     public string ItemId { get; set; } 
     public string ShopId { get; set; } 
     [XmlElement("MessageXml")] 
     public Sub2Class SC2 { get; set; } 

     public class Sub2Class 
     { 
      public string ChildMessage { get; set; } 
     } 
    } 
} 

逆シリアル化方法:

public static T DeserializeForXml<T>(string filePath) 
    { 
     XmlSerializer selializer = new XmlSerializer(typeof(T)); 
     using (Stream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) 
     { 
      return (T)selializer.Deserialize(fs); 
     } 
    } 

使用方法

SampleClass sc = Utility.DeserializeForXml<SampleClass>("test.xml"); 
3

既にスキーマをお持ちの場合は、xsd.exeを使用してクラスを生成してください。それはすでにシリアライザブルとしてマークアップされているので、基本的にはXmlSerializerという名前をつけただけで何もする必要はありません。

関連する問題