JSONをキー/値のない通常の形式にシリアル化しようとしていますが、残念ながらJSONファイルにキーと値の文字列が追加されます。ここ は私のポストメソッドです:SortedListをオブジェクト配列にシリアル化してキー/値を削除する
[TestMethod]
public void PostTest()
{
var request = new HttpRequestMessage();
request.Headers.Add("X-My-Header", "success");
MyCaseRequest data = new MyCaseRequest()
{
Name = "TestAgre",
ExpirationDateTime = "2016-07-14T00:00:00.000Z",
Signatories = new List<SignatoryRequest>
{
new MyRequest() { Type = MyType.Comp, Id = "11111" },
new MyRequest() { Type = MyType.Per, Id = "2222" }
},
Documents = new SortedList<string, ThingsRequest>()
{
{"0" , new ThingsRequest() { Name = "Test", Description = "Short description about", Length = 4523 }},
{"1" , new ThingsRequest() { Name = "Test1", Description = "short description about", Length = 56986 }}
}
};
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.ContractResolver = new DictionaryAsArrayResolver();
settings.Formatting = Formatting.Indented;
string json = JsonConvert.SerializeObject(data, settings);
var statusCode = sendJsonDemo.SendJsonDemo(json);
}
、ここでは、オブジェクト配列にソートされた辞書をシリアライズ私のクラスである:
class DictionaryAsArrayResolver : DefaultContractResolver
{
protected override JsonContract CreateContract(Type objectType)
{
if (objectType.GetInterfaces().Any(i => i == typeof(IDictionary) ||
(i.IsGenericType &&
i.GetGenericTypeDefinition() == typeof(IDictionary<,>))))
{
return base.CreateArrayContract(objectType);
}
return base.CreateContract(objectType);
}
}
、ここでは私の出力です:
{
"Name": "TestAgreement",
"ExpirationDateTime": "2016-07-14T00:00:00.000Z",
"Signatories": [
{
"Type": "Comp",
"Id": "11111"
},
{
"Type": "Per",
"Id": "2222"
}
],
"Documents": [
{
"Key": "0",
"Value": {
"Name": "Test",
"Description": "Short description about",
"Length": 4523
}
},
{
"Key": "1",
"Value": {
"Name": "Test1",
"Description": "short description about",
"Length": 56986
}
}
],
"Metadata": []
}
が本当にASP.NET固有ではないので、あなたが問題を再現できるようにする[mcve]コンソールアプリを提供できるのであれば、最高です。次に、あなたが*得ている出力を表示しました。これは 'SortedList'がキーでソートされたキー/値マップであるため意味があります。 JSONの配列になると思っていましたか?もしそうなら、 'SortedList <,>'の代わりに 'List <>'を使うべきです。 –