Tuple<Guid, int[]>
C# 4.0 では、 DataContractSerializer を使用してシリアル化と逆シリアル化を試みています。Guid
type 、 type int[]
、および typeのシリアライズとデシリアライズに成功しましたTuple<Guid, int>
。type をシリアル化しようとするとTuple<Guid, int[]>
、すべてがコンパイルされますが、次の実行時例外が発生します。
Type 'System.Int32[]' with data contract name
'ArrayOfint:http://schemas.microsoft.com/2003/10/Serialization/Arrays'
is not expected. Consider using a DataContractResolver or add any types
not known statically to the list of known types - for example, by using
the KnownTypeAttribute attribute or by adding them to the list of known
types passed to DataContractSerializer.
私のシリアル化と逆シリアル化のルーチンは単純です。
public static string Serialize<T>(this T obj)
{
var serializer = new DataContractSerializer(obj.GetType());
using (var writer = new StringWriter())
using (var stm = new XmlTextWriter(writer))
{
serializer.WriteObject(stm, obj);
return writer.ToString();
}
}
public static T Deserialize<T>(this string serialized)
{
var serializer = new DataContractSerializer(typeof(T));
using (var reader = new StringReader(serialized))
using (var stm = new XmlTextReader(reader))
{
return (T)serializer.ReadObject(stm);
}
}
この例外が発生するのはなぜですか? また、これを解決または回避するにはどうすればよいですか? Tuple
シリアル化できる型を含んでいれば、シリアル化に問題はないように思えます。