私のモデルを私のWeb APIから正しい方法で送り返すことができません。Webアプリケーションの応答にタイプセーフな列挙型をシリアル化しますか?
私はこの例外メッセージになっています:
public class ValidationCreditReport
{
public int companyId { get; set; }
public string companyName { get; set; }
public CreditRecommendation recommendationSecure { get; set; }
public CreditRecommendation recommendationUnsecure { get; set; }
public CreditOutlook creditOutlook { get; set; }
public IndicativeRating indicativeCorporateRating { get; set; }
public IndicativeRating indicativeSeniorUnsecured { get; set; }
public IndicativeRating indicativeSeniorSecured { get; set; }
public Currency currency { get; set; }
public override string ToString()
{
return companyId + " " + companyName + " " + recommendationSecure.Name + " " + recommendationUnsecure.Name + " " +
creditOutlook.Name + " " + indicativeCorporateRating.Name + " " + indicativeSeniorSecured.Name + " " + indicativeSeniorSecured.Name + " " + currency.Name;
}
}
そして、ここに私の列挙型である:
public class CreditRecommendation
{
public string Name{ get; set; }
private CreditRecommendation (string name)
{
Name = name;
}
public static CreditRecommendation Buy = new CreditRecommendation("Buy");
public static CreditRecommendation Sell = new CreditRecommendation("Sell");
public static CreditRecommendation Hold = new CreditRecommendation("Hold");
public static CreditRecommendation NoRating = new CreditRecommendation("NoRating");
public static CreditRecommendation FromName(string name)
{
switch (name)
{
case "Buy":
return Buy;
case "Sell":
return Sell;
case "Hold":
return Hold;
case "NoRating":
return NoRating;
default:
throw new ArgumentException("Provided name invalid: " + name);
}
}
};
残りこれは私のモデルのように見えるものである
を列挙型モデルのうち、それぞれのスイッチのケースでは、同じ名前だが異なる名前と多かれ少なかれオプションがあります。
今私がしようとしてきたのは、自分のtoString()
関数を記述して、列挙型を.name
と呼び、それを通常の文字列に追加する関数です。私はこの文字列をjson文字列にハードコーディングすることを考えていました。しかし、私はこれがこの問題に取り組んでこれを処理する正しい方法だとは思わない。最終的にここに
とは、私が実際に戻って私のデータを送信しようとどこです:
public HttpResponseMessage GetLastPublishedData(String companyName)
{
using (SqlConnection connection = CreateSqlConnection())
{
using (var transaction = connection.BeginTransaction())
{
try
{
var service = CreateCreditService(connection, transaction);
var msg = service.ValidateAndPrepareCreditReport(companyName);
var result = CreateValidationCreditReport(msg);
transaction.Commit();
return this.Request.CreateResponse<ValidationCreditReport>(HttpStatusCode.OK, result);
}
catch{
transaction.Rollback();
throw;
}
}
}
}
私はプロジェクト全体を歩いてきましたし、問題は私の列挙し、それらをシリアライズすることができないから幹のようです。
何かすべてのヘルプは大歓迎です。
あなたが列挙型について話しているが、その後、あなたが私たちのクラスを示しています。私はあなたがアプローチするのを理解していません、単純な列挙子を表現するためにクラスを使用しているのはなぜですか? –
@FedericoDipuma私は以前の同僚からこのコードの一部を継承しています。私はすべての設計選択について100%確信しているわけではありませんが、私はそれらを理解するために最善を尽くしています。 – Gurkang
@ Gurkang - あなたはこの質問[tag:json]にタグを付けましたが、例外エラーメッセージにXMLが記述されています。あなたはどちらを使っていますか?各シリアライザで異なる動作をするシングルトンシリアライゼーションを試みています(XmlSerializerでは全く動作しません)。[XmlSerialization with a singleton](https://stackoverflow.com/questions/17667164) – dbc