0

以下のような WCF に基づく安らかなサービスがあります: (FeedbackInfo クラスにはenumServiceCode という 1 つのメンバーしかありません)。

[OperationContract]
[WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public List<FeedbackInfo> GetFeedbackInfoList(ServiceCode code)
{
    return ALLDAO.GetFeedbackInfoList(code);
}

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public int? CreateFeedback(FeedbackInfo feedback)
{
    return ALLDAO.CreateFeedback(feedback);
}

以下のように、jquery ajax を使用してこれら 2 つのメソッドを呼び出します。

$.ajax({
    type: "GET",
    url: "/Service/ALL.svc/GetFeedbackInfoList",
    datatype: "text/json",
    data: { "code": "Info"},
});



var feedbackInfo = { feedback: {
    ServiceCode: "Info"
}};
$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "/Service/ALL.svc/CreateFeedback",
    datatype: "text/json",
    data: JSON.stringify(feedbackInfo),
});

最初の呼び出しは正常に実行されますが、2 番目の呼び出しではエラーが表示されます。値 "Info" は型 'Int64' として解析できません。2回目の呼び出しで同じ1つの列挙型を解析できないのはなぜですか? クラスのメンバーとして使用されている列挙型のためだけですか?

編集: FeedbackInfo と ServiceCode は次のようになります。

public class FeedbackInfo
{
    public int ID { get; set; }
    public string Title { get; set; }
    public ServiceCode ServiceCode { get; set; }
}
[DataContract]
public enum ServiceCode
{
    [EnumMember]
    Info,
    [EnumMember]
    Error
}
4

2 に答える 2

0

列挙型は整数としてシリアル化されるため、ServiceCode: 1 (またはその他のもの) を使用するか、FeedbackInfoクラスにカスタム プロパティを追加して、特定の文字列値から列挙型を逆シリアル化する必要があります。つまり、次のようなものです。

public string ServiceCode { 
    get {
        return ServiceCodeEnum.ToString();
    }
    set {
        MyEnum enumVal;
        if (Enum.TryParse<MyEnum>(value, out enumVal))
            ServiceCodeEnum = enumVal;
        else
            ServiceCodeEnum = default(MyEnum);
    }
}

private MyEnum ServiceCodeEnum { get; set; }
于 2012-06-11T09:15:03.763 に答える