我想反序列化一个JSON,其中一个节点包含逗号分隔的值。但是包含逗号的对象在反序列化时返回null。
输入JSON:
{
"SolutionTabletSubSectionUId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"SolutionTabletSubSectionId": 1,
"SolutionTabletUId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"Title": "string",
"SubTitle": "string",
"Description": "string",
"Link": "www.google.com,www.facebook.com",
"LinkDisplayName": "DisplayName1,DisplayName2",
"SolutionTabletConfigurationUId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"SolutionTabletTemplateUId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"ImageName": "string",
"ImagePath": "string",
"DisplayOrderId": 0,
"TemplateComponentUId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"FooterTitle": "string",
"FooterDescription": "string"
}
代码:
var list = new List<MyList>();
list.Add(JsonConvert.DeserializeObject<MyClass>(input));
MySubClass resultSet = new MySubClass();
resultSet.Data = list;
我的课程:
public class MyClass
{
public Guid SolutionTabletSubSectionUId { get; set; }
public int SolutionTabletSubSectionId { get; set; }
public string LinkDisplayName { get; set; }
public string Link { get; set; }
public List<LinkNamesNode> LinkNames { get; set; }
}
public class LinkNamesNode
{
public string LinkDisplayName { get; set; }
public string Link { get; set; }
}
调试时,我发现LinkNames
设置为null或未命中,因为未找到属性名称。请帮助我反序列化对象。
我的输出应如下所示:
{
"LoggedInUser": "string",
"Data": [
{
"SolutionTabletSubSectionUId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"SolutionTabletSubSectionId": 0
"LinkNames": [
{
"LinkDisplayName": "DisplayName1",
"Link": "www.google.com"
},
{
"LinkDisplayName": "DisplayName2",
"Link": "www.facebook.com"
}
]
]
}
请协助。
3条答案
按热度按时间rkkpypqq1#
您可以使用
JsonConstructorAttribute
来实现自定义反序列化逻辑。由于提到了
Link
和LinkDisplayName
的大小在被分隔符拆分后可能在长度上不同:1.获取
links
和linkDisplayNames
数组之间的最大值。1.使用
Array.ElementAtOrDefault(i)
方法,通过index安全地从数组中获取值,并将对象添加到LinkNames
数组中。yhived7q2#
你可以用一个中间物体来解决这个问题,因为两边的结构是不一样的。
1.创建一个临时类:
公共类MyTempClass {公共GUID解决方案表子部分UId { get;set; }公共整数解决方案表子部分ID { get;设置; }
1.将代码更改为:
字符串输入=文件.读取所有文本(“C:\工作目录\堆栈溢出\json序列化\控制台应用1\控制台应用1\jsconfig 1. json”);我的临时类结果= JsonConvert.反序列化对象(输入);转换为我的类();
希望这个有用。
k3fezbri3#
您可以创建一个JSON转换器
并从类中删除这些属性,则您不再需要它们