【问题标题】:Bug in Sgen.exeSgen.exe 中的错误
【发布时间】:2009-07-30 07:08:33
【问题描述】:

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”检查生成的程序集后,我发现生成的程序集不包含 MasterxmlSerializer 类,为什么?

有人有同样的经历吗?如何解决?

【问题讨论】:

  • 似乎没有人知道我的问题:(

标签: .net xml-serialization sgen


【解决方案1】:

不,sgen 不会为开放的泛型类型生成序列化程序。作为 XmlSerializer 的一般规则,如果您没有通过静态分析获得的整个架构,则预生成的程序集将无济于事。

因此,如果您使用泛型,则需要在代码中定义所有派生子类才能使用预生成的程序集。

【讨论】:

    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2018-11-25
    • 2012-12-31
    • 1970-01-01
    • 2014-09-24
    • 2010-09-05
    相关资源
    最近更新 更多