【问题标题】:How to format JSON data as C# object where object properties are generated dynamically如何将 JSON 数据格式化为动态生成对象属性的 C# 对象
【发布时间】:2018-12-23 00:44:11
【问题描述】:

我不确定我的主题是否正确地描述了我的问题,但希望是。

我目前正在处理一个需要与 Mailchimp 集成的项目,并且成员的对象属性之一称为“merge_fields”,它返回键值对的 array

Json 数据(部分仅为简单起见)返回如下:

"members": [{
    "id": "9ff9398a92599aca00401da0fb9f0339da",
"email_address": "myemail@mydomain.com",
"unique_email_id": "90ds8927dae",
"email_type": "html",
"status": "subscribed",
"merge_fields": {
    "FNAME": "My FirstName",
        "LNAME": "My LastName",
        "ADDRESS": "My Address",
        "PHONE": "+555 1234 5678",
        "MMERGE5": ""
},
"stats": {
"avg_open_rate": 0,
"avg_click_rate": 0
},
"ip_signup": "",
"timestamp_signup": "",
...

如您所见,“merge_fields”属性是一个键对值数组,其中键是动态设置的,值也是如此,但我不确定如何在.NET 中定义它以便它可以deserialized 正确使用 .NET NewtonSoft

在我的 Member 类中,MergeFields 属性定义如下:

[JsonProperty("merge_fields")]
public MailchimpMergeFields MergeFields { get; set; }

我的 MailchimpMergeFields 类定义如下:

public class MailchimpMergeFields
{
    /// <summary>
    /// An individual merge var and value for a member.
    /// </summary>
    [JsonProperty("merge_fields")]
    public List<KeyValuePair<object, object>> MergeFields { get; set; }

    public MailchimpMergeFields()
    {
        MergeFields = new List<KeyValuePair<object, object>>();
    }
}

问题是当数据为deserialized时,它返回merge_fields属性数组中的0元素。

知道我是如何反序列化的:

"merge_fields": {
    "FNAME": "My FirstName",
    "LNAME": "My LastName",
    "ADDRESS": "My Address",
    "PHONE": "+555 1234 5678",
    "MMERGE5": ""
},

到 KeyValuePair(或 KeyValuePair)列表并将其存储在 .NET 类中

谢谢。

【问题讨论】:

  • 您是否尝试过使用 Dictionary 或动态?
  • 那不是数组。它是一个对象。
  • @Flydog57 我刚刚尝试将其定义为字典,但它仍然返回 0 个条目。至于动态,我不确定我将如何继续定义它?我可以将属性类型定义为动态,但如果我将其实例化为字典或列表,它仍然不会返回任何项目。
  • @AluanHaddad 你能扩展吗?我该如何解决这个问题?谢谢。
  • @AluanHaddad,好的,我将我的属性定义为一个对象并返回一些数据,所以它在正确的轨道上,但我不确定我是否喜欢它返回它的方式,但至少我可以调查一下,看看我能不能用它做点什么。谢谢

标签: c# json mailchimp json-deserialization mailchimp-api-v3.0


【解决方案1】:

这个 json 模式很容易转换成字典

[JsonProperty("merge_fields")]
public Dictionary<string, string> MergeFields { get; set; }

【讨论】:

  • 我试过了,但没用!我将尝试直接在我的会员课程中进行,因为这可能一直是我的问题。我会在一秒钟内回复你。
  • 是的,但我必须将 Dictionary 直接定义到 Member 类中,而不是按照我的原始帖子在 MailchimpMergeFields 类中定义。再次感谢。
猜你喜欢
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 2020-06-08
  • 2016-05-08
  • 2017-08-27
  • 2020-10-25
  • 1970-01-01
相关资源
最近更新 更多