C# 序列化不';I don’我不接受我的赞扬,为什么?
我遇到了一个序列化问题。我的Silverlight应用程序不希望businessobject中有我的属性,也不知道该怎么办。之前,我通过设置KnownTypeAttribute解决了这个问题,如下面的示例所示,但在本例中,它不起作用 我曾经这样解决它:C# 序列化不';I don’我不接受我的赞扬,为什么?,c#,.net,wcf,serialization,C#,.net,Wcf,Serialization,我遇到了一个序列化问题。我的Silverlight应用程序不希望businessobject中有我的属性,也不知道该怎么办。之前,我通过设置KnownTypeAttribute解决了这个问题,如下面的示例所示,但在本例中,它不起作用 我曾经这样解决它: [DataContract(Name = "baseClass")] public class baseClass { } [DataContract(Name = "busObj1")] public class busObj1 : base
[DataContract(Name = "baseClass")]
public class baseClass { }
[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }
[DataContract(Name = "busObj2")]
[KnownType(typeof(busObj1))]
public class busObj2 : baseClass
{
public busObj1 myObj { get; set; }
}
[DataContract(Name = "baseClass")]
public class baseClass { }
[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }
[DataContract(Name = "busObj2")]
[KnownType(typeof(busObj1))]
public class busObj2 : baseClass
{
public busObj1 myObj { get; set; }
}
// This is the class that I want to send via WCF and that cannot be serialized
// because the serializer doesn't expect busObj1.
[DataContract(Name = "busObj3")]
public class busObj3 : busObj2 { }
我所知道的唯一区别是我的结构略有不同,如下所示:
[DataContract(Name = "baseClass")]
public class baseClass { }
[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }
[DataContract(Name = "busObj2")]
[KnownType(typeof(busObj1))]
public class busObj2 : baseClass
{
public busObj1 myObj { get; set; }
}
[DataContract(Name = "baseClass")]
public class baseClass { }
[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }
[DataContract(Name = "busObj2")]
[KnownType(typeof(busObj1))]
public class busObj2 : baseClass
{
public busObj1 myObj { get; set; }
}
// This is the class that I want to send via WCF and that cannot be serialized
// because the serializer doesn't expect busObj1.
[DataContract(Name = "busObj3")]
public class busObj3 : busObj2 { }
我非常感谢任何可能出错的想法
关于,Clas您需要将已知类型属性放在基本对象上:
[DataContract(Name = "baseClass")]
[KnownType(typeof(busObj1))]
[KnownType(typeof(busObj2))]
[KnownType(typeof(busObj3))]
[KnownType(typeof(busObj4))]
public class baseClass { }
[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }
[DataContract(Name = "busObj2")]
public class busObj2 : baseClass { }
[DataContract(Name = "busObj3")]
public class busObj3 : busObj1
{
public busObj2 myObj { get; set; }
}
[DataContract(Name = "busObj4")]
public class busObj4 : busObj3 { }
或者,如果您不想用这些属性污染域模型,您也可以。您需要将已知类型属性放在基本对象上:
[DataContract(Name = "baseClass")]
[KnownType(typeof(busObj1))]
[KnownType(typeof(busObj2))]
[KnownType(typeof(busObj3))]
[KnownType(typeof(busObj4))]
public class baseClass { }
[DataContract(Name = "busObj1")]
public class busObj1 : baseClass { }
[DataContract(Name = "busObj2")]
public class busObj2 : baseClass { }
[DataContract(Name = "busObj3")]
public class busObj3 : busObj1
{
public busObj2 myObj { get; set; }
}
[DataContract(Name = "busObj4")]
public class busObj4 : busObj3 { }
或者,如果您不想用这些属性污染您的域模型,您也可以。我以前不需要它。为什么在这种情况下?我不知道为什么你以前不需要它。你还没有展示你的服务合同是什么样子的,客户可以看到什么类型的服务合同。你的解决方案帮了我的忙,尽管对我来说仍然是个谜,为什么有些解决方案有时有效,有时无效。无论如何谢谢你!我以前不需要它。为什么在这种情况下?我不知道为什么你以前不需要它。你还没有展示你的服务合同是什么样子的,客户可以看到什么类型的服务合同。你的解决方案帮了我的忙,尽管对我来说仍然是个谜,为什么有些解决方案有时有效,有时无效。无论如何谢谢你!