13

ASP.NET webapi プロジェクトで Swashbuckle 5 をすべてデフォルト設定で使用しています。応答のスキーマを表示するために、メソッドの出力をシリアル化します。次のようなドキュメントを取得しています。

 Response Class (Status 200)
 Model  Model Schema
 [
   {
    "<Key>k__BackingField": "string",
    "<Value>k__BackingField": "string",
    "<Id>k__BackingField": 0
  }
]

これは、次の C# コードによって生成されます

    /// <summary>
    ///     Fetches all system configuration items
    /// </summary>
    /// <returns>List of <see cref="SystemConfigurationDto" /> items</returns>
    public IList<SystemConfigurationDto> GetAllSystemConfigurationItems()
    {
        var result = CommandProcessor.ProcessCommand(new SystemConfigurationQueryCommand()) as SystemConfigurationQueryCommandResponse;

        return result.Results.ToList();
    }

ここで、result.Results は基本的にオブジェクトの標準的なリストであり、それぞれにこれらのキー/値/ID フィールドが含まれています。私はここでhttps://conficient.wordpress.com/2014/05/22/getting-rid-of-k__backingfield-in-serialization/を読みました [serializable] 属性がこれに影響を与える可能性がありますが、それを取り除くつもりはありません可能であれば、属性。このシリアル化アーティファクトを調整するレシピはありますか?

4

1 に答える 1

28

これを に追加WebApiConfig.cs:

config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
    new DefaultContractResolver { IgnoreSerializableAttribute = true };

これにより、 でマークされたクラスの問題が解決され[Serializable]ます。クラスにその属性がない場合でも断続的に問題が発生するため、現在は常にこの設定を使用しています。

于 2015-06-26T01:36:13.317 に答える