我想将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数组吗?如果是这样,你应该使用'List <>'而不是'SortedList <,>'。 –