2013-05-03 36 views
0

我正在構建和XML文件表示和實體。幾個小時後,這似乎正在工作,但有沒有更好的方法?實體到XML(EF5.0)

var entityContents = (from p in context.people select p).ToListAsEnumerable(); 
var XmlString = CollectMemebersNameValue("people" , entityContents); 

public static string CollectMemebersNameValue(string entityName, IEnumerable entityQuery) 
    { 
     var xmlText = new StringBuilder(); 
     xmlText.AppendLine("<" + entityName + ">"); 
     foreach (var item in entityQuery) 
     { 
      xmlText.AppendLine("<Row>"); 
      foreach (var prop in item.GetType().GetProperties()) 
      { 
       if (! prop.PropertyType.Name.Contains("ICollection")) 
       { 
        var nname = prop.Name; 
        var nvalue = prop.GetValue(item, null); 
        xmlText.AppendLine("<" + nname + ">" + nvalue + "</" + nname + ">"); 
       } 

      } 
     } 
     xmlText.AppendLine("</" + entityName + ">"); 
     return xmlText.ToString(); 
    } 
+1

使用XML序列化程序? – zimdanen 2013-05-03 15:34:44

回答

2

是的,您可以使用XmlSerializer,例如,

XmlSerializer xs = new XmlSerializer(typeof(YourObjectType)); 
MemoryStream ms = new MemoryStream(); 
xs.Serialize(ms, yourActualObject); 
string sampleXml = Encoding.UTF8.GetString(ms.ToArray()); 

無論你是序列化你的實體還是實體視圖,它的工作原理都是一樣的。只要確保你正在序列化的任何對象可序列化。

+0

請注意,反序列化和重新連接實體將繞過ObjectContext的ObjectMaterialized事件。如果啓用了代理對象,您也會遇到問題。 – qujck 2013-05-03 17:32:21