如何将 JSON 数据格式化为动态生成对象属性的 C# 对象
Posted
技术标签:
【中文标题】如何将 JSON 数据格式化为动态生成对象属性的 C# 对象【英文标题】:How to format JSON data as C# object where object properties are generated dynamically 【发布时间】: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这个 json 模式很容易转换成字典
[JsonProperty("merge_fields")]
public Dictionary<string, string> MergeFields get; set;
【讨论】:
我试过了,但没用!我将尝试直接在我的会员课程中进行,因为这可能一直是我的问题。我会在一秒钟内回复你。 是的,但我必须将 Dictionary 直接定义到 Member 类中,而不是按照我的原始帖子在 MailchimpMergeFields 类中定义。再次感谢。以上是关于如何将 JSON 数据格式化为动态生成对象属性的 C# 对象的主要内容,如果未能解决你的问题,请参考以下文章
如何将动态对象序列化为 dotnet core 中的 JSON 字符串?
如何将具有嵌套属性的 JSON 对象反序列化为 Symfony 实体?