解析为列表<object-with-matching-variable-names>的对象匿名数组



这是我从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,看看它或它的一部分是否适合定义。在这种情况下,它可以用作定义。

最新更新