【问题标题】:Exception in XmlSerializer for a Dynamic ExpandoObject动态 ExpandoObject 的 XmlSerializer 中的异常
【发布时间】:2017-05-25 08:47:12
【问题描述】:

我有一个类,当我为同一个类调用序列化然后抛出异常时,类中有一个属性类型动态列表-

要成为 XML 可序列化的,从 IEnumerable 继承的类型必须具有 Add(System.Object) 在其所有级别的实现 继承层次结构。 System.Dynamic.ExpandoObject 未实现 添加(系统对象)。

类架构 -

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 = new XmlSerializer(TestClass.GetType());

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

【问题讨论】:

    标签: c# xml asp.net-mvc entity-framework expandoobject


    【解决方案1】:

    列出 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);
            }
    

    【讨论】:

      【解决方案2】:

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

      我所做的只是为每个属性分配适当的值,并将 TestClass.GetType() 更改为 obj.GetType() 并打印 textWriter。请检查以下代码:

      模型类:

      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();
          }
      }
      

      【讨论】:

      • 好的,谢谢。但我的案例产品列表具有属性,它不是字符串列表。请检查我的答案
      • @amethianil 你还面临异常吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多