有没有人让这个真正起作用?关于如何启用此功能的文档不存在,尽管有一个 3.5 SP1 项目,但我仍然缺少属性异常。
问问题
1998 次
6 回答
1
我让它在一个测试应用程序上工作得很好......
服务定义:
[ServiceContract]
public interface IService1
{
[OperationContract]
CompositeType GetData(int value);
}
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
服务实施:
public class Service1 : IService1
{
public CompositeType GetData(int value)
{
return new CompositeType()
{
BoolValue = true,
StringValue = value.ToString()
};
}
}
于 2008-09-15T15:11:50.273 回答
1
我发现它不适用于内部/私有类型,但是将我的类型公开它工作正常。这意味着也没有匿名类型:(
使用反射器,我找到了似乎做出决定的方法 ClassDataContract.IsNonAttributedTypeValidForSerialization(Type)。这似乎是杀手的最后一行,类型必须是可见的,所以不允许内部/私有类型:(
internal static bool IsNonAttributedTypeValidForSerialization(Type type)
{
if (type.IsArray)
{
return false;
}
if (type.IsEnum)
{
return false;
}
if (type.IsGenericParameter)
{
return false;
}
if (Globals.TypeOfIXmlSerializable.IsAssignableFrom(type))
{
return false;
}
if (type.IsPointer)
{
return false;
}
if (type.IsDefined(Globals.TypeOfCollectionDataContractAttribute, false))
{
return false;
}
foreach (Type type2 in type.GetInterfaces())
{
if (CollectionDataContract.IsCollectionInterface(type2))
{
return false;
}
}
if (type.IsSerializable)
{
return false;
}
if (Globals.TypeOfISerializable.IsAssignableFrom(type))
{
return false;
}
if (type.IsDefined(Globals.TypeOfDataContractAttribute, false))
{
return false;
}
if (type == Globals.TypeOfExtensionDataObject)
{
return false;
}
if (type.IsValueType)
{
return type.IsVisible;
}
return (type.IsVisible && (type.GetConstructor(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance, null, Globals.EmptyTypeArray, null) != null));
}
于 2009-01-23T08:07:12.893 回答
0
WCF 中有几个序列化选项:数据协定、XML 序列化和原始数据有效负载。您想使用其中哪些?从问题来看,您似乎正在尝试使用除用 datacontact 属性装饰的对象以外的其他东西。这就是你要问的吗?
于 2008-09-15T14:46:38.417 回答
0
是的,我正在尝试使用作为 SP1 的一部分宣布的无属性序列化(http://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx)。该死的,如果我能让它工作并且没有它的文档。
于 2008-09-15T14:52:12.397 回答
0
可能我对抽象基类的使用使事情变得混乱,尽管我将所有内容都添加到已知类型列表中。
于 2008-09-15T15:16:05.287 回答
0
是的,它可能与抽象类和继承有关。它有时会与序列化混淆。此外,如果一切都不是公开的,它也可能是类和类层次结构的可见性。
于 2008-09-16T16:31:43.227 回答