ネットの99%を検索した後も、次のことに取り組んでいます。私は、パートナー企業が提供するwsdlに従わなければならないWebサービスを持っています。このサービスのメソッドを呼び出すと、(複雑な)クラスが生成されます。サービスが呼び出されると、残念なことにシリアル化エラーが発生します。クラスオブジェクトを配列でいっぱいにしてクラスをシリアライズする方法
私は問題を特定しましたが、解決策を考えることはできません。私は提供されたwsdlに依存しているので、複雑なクラス構造を変更することはできません。誰もが私が逃していることを知ってほしいと思う。エラーがメソッドSerializeを()を呼び出した後上がるキャッチ/お試しで
[System.SerializableAttribute()]
public class MyObject
{
public int Id { get; set; }
public object Item { get; set; } // <---- Note type *object* here
}
[System.SerializableAttribute()]
public class MyItem
{
public int Id { get; set; }
public string Name { get; set; }
}
[TestClass]
public class SerializationTest
{
[TestMethod]
public void Serializing()
{
MyObject myObject = new MyObject { Id = 1 };
myObject.Item = new MyItem[] { new MyItem { Id = 1, Name = "Test" } };
string serializedString = SerializeObjectToXmlString(myObject, new []{ typeof(MyItem)});
Assert.IsFalse(String.IsNullOrWhiteSpace(serializedString));
}
/// <summary>
/// This method serializes objects to an XML string using the XmlSerializer
/// </summary>
private static string SerializeObjectToXmlString(object theObject, Type[] types)
{
using (var oStream = new System.IO.MemoryStream())
{
var oSerializer = new System.Xml.Serialization.XmlSerializer(theObject.GetType(), types);
oSerializer.Serialize(oStream, theObject); // <- Here the error is raised
return System.Text.Encoding.Default.GetString(oStream.ToArray());
}
}
}
:ここに私の問題を再現するサンプルコードです。このエラーの詳細は次のとおりです。
InvalidOperationException was unhandled by user code
- There was an error generating the XML document.
The type MyItem[] may not be used in this context.
私の開発コンテキストは、Visual Studio 2010、.Net Framework 3.5で構成されています。
編集#1:追加シリアル化属性が、エラーが
はい、そうです。私はそれらの属性を追加する必要があります。私は私の例でそれらを追加することを忘れましたが、私のreallifeのコードでそれらを持っています。残念ながら、これでは問題は解決しません。上記のコード例を更新します。 –
私はこの問題がMyObject宣言にあると思います。 'public object Item'を' public MyItem [] Item'に変更してください。 – Marcin
はい、それは複雑さを生成します。唯一の問題は、クラス構造がwsdlから生成されるため、変更できないことです。また、 'object'は私の例では' MyItem [] 'を含んでいますが、他の2つの(より単純な)型を含むことができなければなりません。 –