으로 노동 조합을 차별 I F 번호에 다음 열거가문제 Json.net
type MyEnum =
| Value1
| Value2
| Value3
이 코드는
[Serializable]
[DebuggerDisplay("{__DebugDisplay(),nq}")]
public class MyEnum : IEquatable<MyEnum>, IStructuralEquatable, IComparable<MyEnum>, IComparable, IStructuralComparable
{
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
[DebuggerNonUserCode]
public bool IsValue1 { get; }
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
[DebuggerNonUserCode]
public bool IsValue2 { get; }
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
[DebuggerNonUserCode]
public bool IsValue3 { get; }
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
[DebuggerNonUserCode]
public int Tag { get; }
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
[DebuggerNonUserCode]
public static MyEnum Value1 { get; }
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
[DebuggerNonUserCode]
public static MyEnum Value2 { get; }
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
[DebuggerNonUserCode]
public static MyEnum Value3 { get; }
[CompilerGenerated]
public override sealed int CompareTo(MyEnum obj);
[CompilerGenerated]
public override sealed int CompareTo(object obj);
[CompilerGenerated]
public override sealed int CompareTo(object obj, IComparer comp);
[CompilerGenerated]
public override sealed bool Equals(MyEnum obj);
[CompilerGenerated]
public override sealed bool Equals(object obj);
[CompilerGenerated]
public override sealed bool Equals(object obj, IEqualityComparer comp);
[CompilerGenerated]
public override sealed int GetHashCode();
[CompilerGenerated]
public override sealed int GetHashCode(IEqualityComparer comp);
public static class Tags
{
public const int Value1 = 0;
public const int Value2 = 1;
public const int Value3 = 2;
}
}
문제 를 컴파일 할 때 컴파일러가 생성하는 무엇인가가있을 때 위 enum 유형은 비 직렬화를 위해 각 속성에 대해 비 정적 인 set
을 필요로하는 직렬화에 사용되지만 실패합니다. 사실 나는 RavenDB
과 Json.Net
직렬화를 사용하고 난 시리얼 라이저와 F # 열거 형의
myenummember = {}
다음 어떻게 효과적으로해야합니까 사용을 얻을?
그것은 열거 형이 아니라 공용체 유형입니다. 다음은 enum입니다 :'type MyEnum = Value1 = 0 | Value2 = 1 | Value3 = 2' – ildjarn
DU (예제가 실제로 무엇인지)를 직렬화하려는 경우, 우리는 최근에 이와 비슷한 질문을 최근에 받았습니다 : http://stackoverflow.com/questions/24884814/serializing-f-discriminated-unions- with-protobuf –
ildjarn이 말한 것. F # [.NET enum types] (http://fsharpforfunandprofit.com/posts/enum-types/)에서 [discriminated union types]과 완전히 다른 (http://fsharpforfunandprofit.com/posts/discriminated-unions)입니다. /), 비록 그들이 매우 유사한 문법으로 보일지라도. 열거 형은 표준 .NET 열거 형이며이를 이해하는 모든 serializer와 호환됩니다. 반면에 DU는 중첩 된 클래스가있는 클래스에 의해 내부적으로 표현되며 serializer의 특별한 지원이 필요합니다. 차이점을 설명하는 [좋은 게시물] (http://ikriv.com/dev/misc/fsharp/fs_enums.html)이 있습니다. – Grundoon