【问题标题】:C# JsonConvert.DeserializeObject does not properly fill objectC# JsonConvert.DeserializeObject 没有正确填充对象
【发布时间】:2019-01-06 14:42:25
【问题描述】:

JsonConvert.DeserializeObject<Language>(json) 返回属性为空的对象。我想填充 lang 对象,它应该有一些属性,例如名为“IncreaseIndent”的字符串列表等。

Indentor.json

{"VBA":[
  { "IncreaseIndent":["Public Sub *","Public Function *","If *then","While *","Do","Do while *","For *","With *","Select Case *","Sub *","Function *","* Type *","Private Sub *","Private Function *","* Enum *"]},
  { "DecreaseIndent":["End Sub","End Function","End if","Wend","Loop While *","Loop","Next","Next *","End With","End Select","End Type","End Enum"] },
  { "Exception":["Elseif *","Else","Case *","Case"]}
]}

C#

public static string FormatCode(string strCode)
{
    Language lang;
    using (StreamReader r = new StreamReader("A:/standardvba/Logic/Indentor.json"))
    {
        string json = r.ReadToEnd();
        lang = JsonConvert.DeserializeObject<Language>(json); //Inside lang every property is null
        return IndentCodePiece(strCode, lang);
    }
}

public class Language
{
    public string ProgrammingLanguage { get; set; }
    public List<string> IncreaseIndent { get; set; }
    public List<string> DecreaseIndent { get; set; }
    public List<string> Exception { get; set; }
}

【问题讨论】:

  • 错误告诉你到底哪里出了问题。您的 Json 无效。在这里选中 ""IncreaseIndent":"Public Sub *","Public Function *"" 开头
  • 你在不提供解决方案的情况下指出问题是天真的。错误说明了问题,而不是解决方案,我们都在这里寻求解决方案。
  • 我同意,但仅限于扩展。重要的是,我们还允许开发人员在问题显而易见时自己发现问题,从而指出他需要查看的确切代码段。这就是为什么我在 JSON 中指出错误开始的确切位置的原因。 OP 没有提到您想知道如何表示列表(值中的逗号分隔)。抱歉,如果您有其他感觉。

标签: c# json asp.net-mvc parsing json-deserialization


【解决方案1】:

您的 JSON 格式错误,IncreaseIndentDecreaseIndentException 应该是字符串列表:

{"VBA":[
    { "IncreaseIndent":["Public Sub *","Public Function *",...] },
    { "DecreaseIndent":["End Sub","End Function", ...] },
    { "Exception":["Elseif *","Else","Case *","Case"] }
]}

我在 II、DI 和 Ex 之后添加了 [,并在每个值的末尾添加了 ]

您可以在页面 https://jsonlint.com 上验证 josn,您会看到验证将失败。如果您引入更改,我建议验证是可以的!

【讨论】:

  • 有人很快纠正了我的格式,所以谢谢你:)
  • 我已经编辑了我的问题,请您现在提供一个解决方案。
猜你喜欢
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 2023-03-11
  • 2015-05-17
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多