Исключение в XmlSerializer для динамического ExpandoObject

У меня есть класс, и в классе есть динамический список типа свойства, когда я вызываю сериализацию для того же класса, а затем выбрасываю исключение.

Чтобы быть XML-сериализуемым, типы, наследуемые от IEnumerable, должны иметь реализацию Add(System.Object) на всех уровнях иерархии наследования. System.Dynamic.ExpandoObject не реализует Add(System.Object).

Архитектура класса -

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

person amethianil    schedule 25.05.2017    source источник


Ответы (2)


Список продуктов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);
        }
person amethianil    schedule 25.05.2017

Пожалуйста, используйте класс модели вместо динамического для сериализации, так как тип должен быть определен для динамического.

Все, что я сделал, это присвоил правильные значения каждому свойству и изменил TestClass.GetType() на obj.GetType() и распечатал textWriter. Пожалуйста, проверьте код ниже:

МодельКласс:

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

Тестовый класс:

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();
    }
}
person ViVi    schedule 25.05.2017
comment
Хорошо, спасибо. Но в моем случае Список продуктов имеет свойства, а не список строк. Пожалуйста, проверьте мой ответ - person amethianil; 25.05.2017
comment
@amethianil Вы все еще сталкиваетесь с исключением? - person ViVi; 25.05.2017