Ошибка в Sgen.exe - PullRequest
       27

Ошибка в Sgen.exe

1 голос
/ 30 июля 2009

Кажется, что sgen.exe не может генерировать универсальный тип XmlSerializer, верно?
Мой родовой тип:

[Serializable]
[XmlRoot(ElementName = "Masterx")]
public class Masterx<T> where T : class, new()
{....}

Код сериализатора:

 protected virtual List<T> ParseXMLToObject<T>(string resultXML) where T : class, new()
    {
        //return ParseXMLToObject<T>(resultXML, "Masterx");
        XmlSerializer xs = new XmlSerializer(typeof(Masterx<T>));
        System.IO.StringReader sr = new System.IO.StringReader(resultXML);
        XmlReader xr = XmlReader.Create(sr);

        Masterx<T> masterx = null;
        if (!string.IsNullOrEmpty(resultXML))
        {
            if (xs.CanDeserialize(xr))
            {
                //Parse the xml to object
                masterx = xs.Deserialize(xr) as Masterx<T>;
            }
        }
        List<T> rtnObjList = new List<T>();
        if (masterx != null)
        {
            rtnObjList = masterx.MasterxRowList;
        }
        return rtnObjList;
    }

После запуска sgen.exe и проверки созданной сборки с помощью «Reflector» я обнаружил, что созданная сборка не содержит класс MasterxXmlSerializer, почему?

Есть ли у кого-то такой же опыт? Как это исправить?

1 Ответ

0 голосов
/ 02 февраля 2010

Нет, sgen не генерирует сериализаторы для открытых универсальных типов. Как правило, в XmlSerializer предварительно созданные сборки могут быть бесполезны, если у вас нет всей схемы, доступной посредством статического анализа.

Таким образом, если вы используете дженерики, вам нужно определить все производные подклассы в коде, чтобы иметь возможность использовать предварительно созданные сборки.

...