2017-05-25 59 views
0

我有一个类,并在课堂上有,当我打电话序列化的同一类然后把exception-异常的XmlSerializer的一个动态ExpandoObject

要XML序列化,其继承的类型属性类型动态列表从IEnumerable必须有 继承层次结构的所有级别的Add(System.Object)实现。 System.Dynamic.ExpandoObject不执行 添加(System.Object)。

Class架构 -

public class TestClass 
{ 
    public string Property1{ get; set; } 
    public string Property2{ get; set; } 
    public string Property3{ get; set; } 
    public string Property4{ get; set; } 

    public List<dynamic> ProductList { get; set; } 
} 

XmlSerializer的XmlSerializer的新= XmlSerializer的(TestClass.GetType());

 using (StringWriter textWriter = new StringWriter()) 
     { 
      xmlSerializer.Serialize(textWriter, Obj); 
      string xmlString=textWriter.ToString(); 
     } 

回答

-1

请使用一个模型类,而不是动态的序列化,因为类型需要动态进行定义。

我所做的每一个属性分配正确的价值观,改变了TestClass.GetType()来obj.GetType()和打印的TextWriter。请检查下面的代码:

的ModelClass:

public class ModelClass 
{ 
    public string Name { get; set; } 
    public string Search { get; set; } 
} 

的识别TestClass:

public class TestClass 
{ 
    public string Property1 { get; set; } 
    public string Property2 { get; set; } 
    public string Property3 { get; set; } 
    public string Property4 { get; set; } 

    public List<ModelClass> ProductList { get; set; } 
} 

的类执行程序:

class Program 
{ 
    public static void Main(string[] args) 
    { 
     List<ModelClass> productList = new List<ModelClass>(); 

     var product1 = new ModelClass(); 
     product1.Name = "Name1"; 
     product1.Search = "Search1"; 

     productList.Add(product1); 

     var product2 = new ModelClass(); 
     product2.Name = "Name2"; 
     product2.Search = "Search2"; 

     productList.Add(product2); 

     var product3 = new ModelClass(); 
     product3.Name = "Name3"; 
     product3.Search = "Search3"; 

     productList.Add(product3); 

     TestClass obj = new TestClass(); 

     obj.Property1 = "p1"; 
     obj.Property2 = "p2"; 
     obj.Property3 = "p3"; 
     obj.Property4 = "p4"; 
     obj.ProductList = productList; 

     XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType()); 

     using (StringWriter textWriter = new StringWriter()) 
     { 
      xmlSerializer.Serialize(textWriter, obj); 
      string xmlString = textWriter.ToString(); 
      Console.WriteLine(textWriter); 
     } 

     Console.ReadKey(); 
    } 
} 
+0

好的谢谢。但我的情况产品列表的属性不是一个字符串列表。 请检查我的回答 – amethianil

+0

@amethianil你仍然面临例外吗? – ViVi

0

List productList = new List();

 dynamic product1 = new ExpandoObject(); 
     product1.Name = "Name1"; 
     product1.Search = "Search1"; 

     productList.Add(product1); 

     dynamic product2 = new ExpandoObject(); 
     product2.Name = "Name2"; 
     product2.Search = "Search2"; 

     productList.Add(product2); 

     dynamic product3 = new ExpandoObject(); 
     product3.Name = "Name3"; 
     product3.Search = "Search3"; 

     productList.Add(product3); 

     TestClass obj = new TestClass(); 

     obj.Property1 = "p1"; 
     obj.Property2 = "p2"; 
     obj.Property3 = "p3"; 
     obj.Property4 = "p4"; 
     obj.ProductList = productList; 

     XmlSerializer xmlSerializeraa = new XmlSerializer(obj.GetType()); 

     using (StringWriter textWriter = new StringWriter()) 
     { 
      xmlSerializeraa.Serialize(textWriter, obj); 
      string xmlStringOut = textWriter.ToString(); 
      Console.WriteLine(textWriter); 
     }