2011-11-26 76 views
2

我想從類中構建以下XML節點。從類中生成XML

<Foo id="bar">some value</Foo> 

我的班級定義應該如何?

class Foo 
{ 
    public string Value {set;get;} 
    public string id{set;get;} 
} 

我相信我應該把這些屬性的一些XML屬性,但不知道它們是什麼。

回答

9

查看System.Xml.Serialization命名空間下的屬性。在你的情況下,這個類應該看起來像下面的代碼。

public class StackOverflow_8281703 
{ 
    [XmlType(Namespace = "")] 
    public class Foo 
    { 
     [XmlText] 
     public string Value { set; get; } 
     [XmlAttribute] 
     public string id { set; get; } 
    } 
    public static void Test() 
    { 
     MemoryStream ms = new MemoryStream(); 
     XmlSerializer xs = new XmlSerializer(typeof(Foo)); 
     Foo foo = new Foo { id = "bar", Value = "some value" }; 
     xs.Serialize(ms, foo); 
     Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray())); 
    } 
} 

更新:添加了代碼序列的類型。

+0

好吧,我怎麼可以在分配值後從這個類生成XML? – DarthVader

+1

用例子編輯答案。你將使用'XmlSerializer'類。 – carlosfigueira

+0

謝謝。這是一種生成XML的有效方法嗎?我應該研究哪些更好/更快的方法? – DarthVader

2

對於C#和Visual Basic,沒有理由手動執行此操作。 Visual Studio包含一個命令行工具,可爲您生成類或xml架構。詳情請參閱http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=VS.100).aspx

+0

真的嗎?因爲我推薦使用存在的工具,而不是手動使用該工具,所以不投票? –

+0

我同意 - 爲什麼不投票呢?甚至更多,爲什麼投票沒有解釋。這沒有幫助或禮貌。如果你正在使用一個定義良好的模式(如果你不是,那麼爲什麼不 - 它們非常有用,除非是非常簡單的情況),那麼這是一個很好的工具。它讓你在一個地方更新模式並重新生成代碼 - 比手動更新代碼和模式要好得多。 –

+0

這個工具真的很棒。我也不明白爲什麼downvoting,所以我給你一個upvote :) – dasheddot