这是我从api返回的值。我当前的代码说这应该是一个jsonarray,以便正确地反序列化。
我相信这是一个带有对象列表(或数组(的匿名数组。我试过以下几种我正在使用c#和newtonsoft JSON
问题:如何将对象从这个匿名数组中取出并放入列表中??
变量"dmReturn_Token_BaseMetadata"是具有api 所需参数的模型
A Failed:
var test = new { typeof(dmReturn_Token_BaseMetadata) };
dmReturn_Token_BaseMetadata Token_Metadata = JsonConvert.DeserializeAnonymousType<dmReturn_Token_BaseMetadata>(jString, test);
B Failed:
var test = new[] { new dmReturn_Token_BaseMetadata() };
dmReturn_Token_BaseMetadata Token_Metadata = JsonConvert.DeserializeAnonymousType<dmReturn_Token_BaseMetadata>(jString, test);
C Failed:
dmReturn_Token_BaseMetadata Token_Metadata = JsonConvert.DeserializeObject<new[] {new dmReturn_Token_BaseMetadata()}>(jString);
D Failed:
dmReturn_Token_BaseMetadata[] Token_Metadata = JsonConvert.DeserializeObject<dmReturn_Token_BaseMetadata[]>(jString);
E Failed:
List<dmReturn_Token_BaseMetadata> Token_Metadata = JsonConvert.DeserializeObject<List<dmReturn_Token_BaseMetadata>>(jString);
F Failed:
var test = new { dmReturn_Token_BaseMetadata };
dmReturn_Token_BaseMetadata Token_Metadata = JsonConvert.DeserializeAnonymousType<dmReturn_Token_BaseMetadata>(jString, test);
G Failed:
var test = new{ Address = "", name = "", symbol = "", decimals = "", logo = "", logo_hash = "", thumbnail = "", block_number = "", validated = "", created_at = ""};
dmReturn_Token_BaseMetadata Token_Metadata = JsonConvert.DeserializeAnonymousType<test>(jString, test);
"jString"变量包含我从api调用中收到的对象的匿名数组字符串。
[
{
"address": "0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce",
"name": "SHIBA INU",
"symbol": "SHIB",
"decimals": "18",
"logo": "https://cdn.moralis.io/eth/0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce.png",
"logo_hash": "0dba9c0d492b42b3a73c5ceee62b205568a8b5c1932cac048ccd71cbbe051690",
"thumbnail": "https://cdn.moralis.io/eth/0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce_thumb.png",
"block_number": null,
"validated": null,
"created_at": "2022-01-20T10:39:55.818Z"
},
{
"address": "0xbb0e17ef65f82ab018d8edd776e8dd940327b28b",
"name": "Axie Infinity Shard",
"symbol": "AXS",
"decimals": "18",
"logo": null,
"logo_hash": null,
"thumbnail": null,
"block_number": "12314534",
"validated": 1,
"created_at": "2022-01-20T10:39:55.818Z"
}
]
您可以在开始和之后创建anonymos对象来反序列化,但这对我来说似乎更可读
var result = JArray.Parse(json)
.Select(jo => new
{
address = jo["address"],
name = jo["name"],
symbol = jo["symbol"],
decimals = jo["decimals"],
logo = jo["logo"],
logo_hash = jo["logo_hash"],
thumbnail = jo["thumbnail"],
block_number = jo["block_number"],
validated = jo["validated"],
created_at = (DateTime?) jo["created_at"]
}).ToList();
或者,如果你想用困难的方式,可以使用DeserializeAnymousType
var definition = new[] { new {
address = "",
name = "",
symbol = "",
decimals = "",
logo = "",
logo_hash = "",
thumbnail = "",
block_number = (int?)null,
validated = "",
created_at = DateTime.Now
}};
var result =JsonConvert.DeserializeAnonymousType(json, definition ).ToList();
或者你必须发布dmReturn_Token_BaseMetadata,看看它或它的一部分是否适合定义。在这种情况下,它可以用作定义。