首页 > 解决方案 > 有谁知道可以序列化私人成员的 ServiceStack.Text 分支?

问题描述

我有一组类似于枚举器的类,其中有两层来表示分类。Key 和 Numeral 永远不会公开公开,以强制任何实现使用运算符而不是属性 Key 和 Numeral 使用类对象本身。我正在使用 ServiceStack 来序列化嵌套了这个 EnumClass 的类。当然,ServiceStack.Text 不支持对私有成员进行序列化,但我想知道是否有人开发了它的一个分支?

顶层或父层的示例代码:

[Serializable]
public class EnumClass
{
    [DataMember]
    protected internal String Key;
    [DataMember]
    protected internal Byte Numeral;

    public EnumClass(String _key, Byte _number)
    {
        Key = _key;
        Numeral = _number;
    }

    public static implicit operator int(EnumClass anEnum)
    {
        return anEnum.Numeral;
    }

    public static implicit operator string(EnumClass anEnum)
    {
        return anEnum.Key;
    }

    public override bool Equals(object obj)
    {
        bool result = false;
        if (obj.GetType() == typeof(EnumClass))
            result = Equals((EnumClass)obj);
        else if (obj.GetType() == typeof(int))
            result = Equals((int)obj);
        else if (obj.GetType() == typeof(String))
            result = Equals(obj.ToString());
        return result;
    }

    public override String ToString()
    {
        return Key;
    }        

    public bool Equals(EnumClass anEnum)
    {
        return anEnum.Equals((int)Numeral);
    }

    public bool Equals(int value)
    {
        return Numeral == (byte)value;
    }

    public bool Equals(string value)
    {
        return Key == value;
    }

    public override int GetHashCode()
    {
        //return Key.GetHashCode() ^ Numeral.GetHashCode();
        int result = 0;
        unchecked // Overflow is fine, just wrap
        {
            result = (int)2166136261;
            result = ShiftBits.ShiftAndWrap((result * 16777619) ^ Numeral, 2);
            for (int x = 0; x < Key.Length; x++)
            {
                result = ShiftBits.ShiftAndWrap((result * 16777619) ^ Key[x], 2);
            }

        }
        return result;
    }
}

标签: c#serializationservicestack-text

解决方案


推荐阅读