自分がやろうとしていること(申し訳ありませんが、newb)を説明する方法すらわかりませんが、正しく行う方法がわからないためにコードを複製することは、私のリストの上位にはありません。何か助けてください?
オリジナルの非ジェネリックメソッド:
public static string SerializetaUpdateCreateItemRcd(IVItemMasterType o)
{
eConnectType eConnect = new eConnectType();
IVItemMasterType[] myMaster = { o };
// Populate the eConnectType object with the schema object
eConnect.IVItemMasterType = myMaster;
return MemoryStreamSerializer(eConnect);
}
ジェネリックで、非常に近く、型付きプロパティ(?)の設定で失われた私の試み:
public static string Serialize<T>(T o) where T : eConnectType
{
eConnectType eConnect = new eConnectType();
T[] myMaster = { o };
// Populate the eConnectType object with the schema object
eConnect.? = myMaster;
return MemoryStreamSerializer(eConnect);
}
アップデート:
申し訳ありませんが、これはすべてアーキテクチャの問題かもしれませんが、約166の可能な組み合わせがあり、それぞれに対してこの1つのステップをコーディングするのはばかげているようです。私はそれだけをしなければならないかもしれません...
eConnectへのMSDocリファレンス:http: //msdn.microsoft.com/en-us/library/ff623781.aspx
シリアル化を呼び出すサンプルコード:
IVItemMasterType o = new IVItemMasterType();
o.eConnectProcessInfo = null;
o.taCreateInternetAddresses_Items = null;
o.taCreateItemVendors_Items = null;
o.taCreateKitItemRcd_Items = null;
o.taItemSite_Items = null;
o.taIVCreateItemPriceListHeader = null;
o.taIVCreateItemPriceListLine_Items = null;
o.taRequesterTrxDisabler_Items = null;
o.taUpdateCreateItemCurrencyRcd_Items = null;
o.taUpdateCreateItemRcd = eConnectHelper.taUpdateCreateItemRcdFactory(eItem);
// Serialize into string & add to list
List<string> sList = new List<string>();
sList.Add(eConnectHelper.Serialize(o));
// Submit list to eConnect
eCreateEntity(sList);
SerializeMemoryStreamコード:
public static string MemoryStreamSerializer(eConnectType e)
{
XmlSerializer serializer = new XmlSerializer(e.GetType());
using (var memoryStream = new MemoryStream())
{
serializer.Serialize(memoryStream, e);
memoryStream.Position = 0;
// Use memory streamed XML document to create a string representation of the object
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(memoryStream);
memoryStream.Close();
string sDocument = xmldoc.OuterXml;
return sDocument;
}
}
アップデート2:
お二人に感謝します。その上で寝た後、私は自分のアーキテクチャのエラーに気づきました。どちらの方法でもeConnectオブジェクトをビルドする必要があり、前のメソッド呼び出しですでにサブタイプオブジェクトをビルドしているので、タイプしたシリアル化コードをバックトラックしてメインの呼び出しメソッドに移動しました。
私はリフレクションを試しましたが、コンパイルして実行しましたが、私が知る限り、すべてのオブジェクトにデータが入力されているにもかかわらず、何らかの理由でObjectReference/NullReferenceを除外しました。
これが私がそれをどのように使っていたかです:
public static string Serialize<T>(T o)
{
eConnectType e = new eConnectType();
T[] myMaster = { o };
// Populate the eConnectType object with the schema object
typeof(eConnectType).GetProperty(typeof(T).Name).SetValue(e, myMaster, null);
return MemoryStreamSerializer(e);
}