Elv*_*gic 3 c# serialization datacontractserializer
我有这个课程:
[DataContract]
class ClassA
{
[DataMember]
public Object Value; // and this can be of ClassB or some primitive type.
...
}
[DataContract]
class ClassB : IEnumerable<KeyValuePair<String, ClassA>>
{
[DataMember]
private Dictionary<String, ClassA> dictionary;
...
}
Run Code Online (Sandbox Code Playgroud)
但在序列化时发生此异常:
键入"MyNamespace.ClassA",数据合同名称为"ClassA:http://schemas.datacontract.org/2004/07/MyNamespace ".将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中.
我觉得我应该使用KnownType属性,但我无法弄清楚如何,因为我不拥有IEnumerable<T>.
有人可以帮忙吗?谢谢.
我终于做对了.解决方案很简单,Value从第一类是类型Object,并且序列化器必须知道哪些类型将被装入其中Object.
所以ClassA应该声明为:
[DataContract]
[KnownType(typeof(ClassA)]
[KnownType(typeof(ClassB)]
class ClassA
{
[DataMember]
public Object Value; // ClassA or ClassB or some primitive type.
...
}
Run Code Online (Sandbox Code Playgroud)
本文在这里真的帮助澄清什么KnownType.
小智 2
请尝试以下操作:
[DataContract]
[KnownType(typeof(int))]
// Same way add here all the types that you are using in your class A.
class ClassA
{
[DataMember]
public int Value;
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11584 次 |
| 最近记录: |