あなたの説明によると、私はこの問題を私の側でテストし、私の側とAzureでうまく動作することを発見しました。ここに私の詳細な手順があります。それを参照することができます。
// GET: api/UserInfo
[HttpGet]
public async Task<string> Get()
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(<your-Storage-ConnectionString>);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable cloudTable = tableClient.GetTableReference("UserInfo");
TableQuery<User> query = new TableQuery<User>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Grade Four"));
var results =await cloudTable.ExecuteQuerySegmentedAsync(query, null);
//Serialize the object to string by using the latest stable version of Newtonsoft.Json
string jsonString = JsonConvert.SerializeObject(results);
return jsonString;
}
エンティティ
public class User : TableEntity
{
public User(string partitionKey, string rowKey)
{
this.PartitionKey = partitionKey;
this.RowKey = rowKey;
}
public User() { }
[JsonProperty("id")]
public long ID { get; set; }
[JsonProperty("username")]
public string UserName { get; set; }
[JsonProperty("phone")]
public string Phone { get; set; }
[JsonProperty("age")]
public int Age { get; set; }
}
結果
:
このようGet
機能付きのWeb APIアプリケーションでUserInfoControllerという名前のコントローラを作成します。 Web APIアプリケーションをAzureにデプロイすると、Fiddler経由で関数を呼び出すことによって次の結果が得られます。
要約すると、使用しているJson.NETのバージョンをチェックしてみてください。最新バージョン(9.0.1)を使用していない場合は、最新バージョンにアップグレードしてアプリケーションを再度実行して、期待どおりに動作するかどうかを確認してください。
他の内部操作があなたの例では中deserilaizationの追加オーバーヘッドを回避するために、ユーザーを再実行し、オブジェクトとしてそれを返すことを好む場合は、直接関数を呼び出すので、まあ、私は文字列に戻り値の型を変更することができると思いますが、これを呼び出す関数。 – frigon
あなたのコメントに基づいて、 'Get'関数の戻り値の型を' Task> 'に変更しました。すると、私は期待通りにシリアル化された結果を得ることができました。また、 'WebApiConfig.Register()'に 'config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();'を追加することで、Jsonのシリアライゼーションに関するグローバル設定を行うことができます。このチュートリアル(http: //www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#json_camelcasing)を参照してください。 –
問題は、SDKを使用したシリアル化TO Azureテーブルストレージが、ワイヤ/オデータを経由するようにシリアル化されているにもかかわらず、JsonProperty( "小文字")属性を尊重しないことです。だから私は、属性(小文字のプロパティ名)を尊重して私のWeb APIからデータを取得することができますが、灰色のテーブルストレージのデータはまだ大文字の構造に従います。>(ウェブAPIはdeserialzed)PropertyName意味 - - ただ、予想外のようです>(Azureテーブルシリアル化された) をpropertyNameのSDKを経由して、テーブルのストレージに私のWeb API throughtクライアントから来る例えば は propertyNameの(クライアントシリアライズされたが)行きますIMOに – frigon