1

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 クラスが含まれていないことがわかりました。なぜですか?

誰かが同じ経験をしていますか?修正方法は?

4

1 に答える 1

0

いいえ、sgenオープン ジェネリック型のシリアライザーは生成しません。XmlSerializer の一般的なルールとして、事前に生成されたアセンブリは、静的分析によってスキーマ全体を利用できない場合は役に立ちません。

したがって、ジェネリックを使用する場合は、事前に生成されたアセンブリを使用できるように、すべての派生サブクラスをコードで定義する必要があります。

于 2010-02-01T23:31:07.310 に答える