You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# POST调用API如何构造带自定义key的metadata键值对数组

C# 构造API要求的metadata键值对数组传参方案

问题说明

此前向API发送POST请求时,使用字符串数组作为metadata传参,原有代码如下:

string[] metaArray = new string[1];
metaArray[0] = "userID buyer: " + CachedUserOurself.userID;
    
var postModel = new
{
    merchant_uid = merchant_uid_toreceiveMoney,
    products = products,
    metadata = parameters,
    // 其余字段省略
};

该写法当前可正常运行,但后续将不再兼容:API会自动将字符串数组的下标作为key值解析,例如传入:

"metadata": [
    "userID buyer: 1419"
],

会被自动转换为以下结构,其中自动生成的"key": "0"即将触发接口报错:

"metadata": [
        {
            "key": "0",
            "value": "userID buyer: 1419"
        }
],

需要调整传参格式,最终生成显式指定key、value的结构,目标格式如下:

"metadata": [
        {
            "key": "userID buyer",
            "value": "1419"
        }
],

此前尝试使用List<KeyValuePair<string, string>>构造参数,写法如下,但无法被API识别:

var parameters = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("key", "userId buyer"),
    new KeyValuePair<string, string>("value", CachedUserOurself.userID)
};

错误原因

上述KeyValuePair写法的问题在于,列表中包含2个独立的键值对元素,序列化后会生成2个平级的对象,完全不符合API要求的「单个数组元素内同时包含key、value两个属性」的结构。

正确实现方式

直接构造匿名对象数组/列表,让每个数组元素都是同时包含key和value属性的对象,序列化后即可完全匹配接口要求,代码如下:

// 构造符合接口要求的metadata结构
var metadataParams = new List<object>
{
    new 
    {
        key = "userID buyer",
        value = CachedUserOurself.userID.ToString()
        // 若需要新增其他元数据项,直接在列表内追加同结构的匿名对象即可
    }
};

var postModel = new
{
    merchant_uid = merchant_uid_toreceiveMoney,
    products = products,
    metadata = metadataParams,
    // 其余字段保持原有逻辑不变
};

如果需要传递多个元数据项,直接在列表中新增对应匿名对象即可,示例:

var metadataParams = new List<object>
{
    new 
    {
        key = "userID buyer",
        value = CachedUserOurself.userID.ToString()
    },
    new
    {
        key = "orderSource",
        value = "h5Page"
    }
};

该写法序列化后的JSON结构和API要求完全一致,不会再出现自动生成数字下标的报错问题。


内容的提问来源于stack exchange,提问作者innom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 22:39:12