结构体为键的字典无法正确序列化

3
我有一个WCF服务,我试图从客户端发送一个Dictionary<CustomStruct, int>到服务器。我的WCF服务使用默认的BasicHttpBinding。
当我将字典发送到服务器时,不会抛出任何错误。但是当我尝试遍历我的字典时,它是空的。
奇怪的是,Dictionary<string, string>实际上可以工作?!
有人有想法为什么我的Dictionary<CustomStruct, int>在通过网络传输后为空,并且为什么Dictionary<string, string>可以工作。
[编辑] 这是我的结构体的样子:
[DataContract]
public struct CustomStruct : IEquatable<CustomStruct>
{
    [DataMember]
    private string _prop;

    public string Prop { get { return _prop; } }

    public override int GetHashCode()
    {
        return Prop.GetHashCode();
    }

    public static bool operator ==(CustomStruct left, CustomStruct right)
    {
        ...
    }

    public static bool operator !=(CustomStruct left, CustomStruct right)
    {
        ...
    }

    public override bool Equals(object obj)
    {
        ...
    }
}

CustomStruct的布局是什么? - linuxuser27
你能发布一下你的 CustomStruct 代码吗?它被标记为“可序列化”了吗? - Bala R
你可以提供由代理生成的CustomStruct吗?(假设你使用了Add Service Reference)如果你在服务引用上使用了“显示所有文件”选项,你会在Reference.cs文件中找到它。此外,CustomStruct是否在一个命名空间中? - Richard Blewett
我不太确定Reference.cs是什么,但是CustomStruct确实在一个命名空间中。 - Jean-Philippe Leclerc
我不知道你是如何将字符串字典序列化的,但一般情况下,任何实现IDictionary接口的东西都没法被序列化。你需要考虑自己实现一个包装器。可以查看MSDN文章(搜索IDictionary)。 - lsuarez
显示剩余4条评论
2个回答

1

谢谢但是它没有帮助到我。 - Jean-Philippe Leclerc

1

这里有一个可行的示例,可以实现你想要的功能

http://rocksolidknowledge.blob.core.windows.net/demos/CustomStructSerialization.zip

很遗憾,根据你提供的代码,我无法看出问题在哪里——猜测你的 CustomStruct 在客户端和服务端有不同的命名空间,因此序列化无法正常工作,但是如果没有看到生成的代码和完整的自定义结构,我就无法确定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接