【问题标题】:Deserialize JSON to Nested Model将 JSON 反序列化为嵌套模型
【发布时间】:2020-09-29 17:55:14
【问题描述】:

我有一个如下模型:

public class YourInformationInputModel
    {
        public YourInformationInputModel()
        {           
            PrimaryBuyerInformation = new PrimaryBuyerInformationInputModel();          
        }

        public PrimaryBuyerInformationInputModel PrimaryBuyerInformation { get; set; } 

        public bool TermsCondition { get; set; }
    }

PrimaryBuyerInputModel 如下:

public class PrimaryBuyerInformationInputModel
    {

        [Required]
        public string BuyerFirstName { get; set; }

        public string BuyerMiddleInitial { get; set; }

        [Required]
        public string BuyerLastName { get; set; }
    }

当我提交表单时,我会得到如下 JSON:

{
  "PrimaryBuyerInformation.BuyerFirstName": "Sunil",
  "PrimaryBuyerInformation.BuyerMiddleInitial": "",
  "PrimaryBuyerInformation.BuyerLastName": "Choudhary",
  "TermsCondition": "true"
}

当我尝试反序列化此 json 时,TermsCondition 属性已成功完成,但 PrimaryBuyerInformation 的属性未映射。

var myObject = JsonConvert.DeserializeObject<YourInformationInputModel>(json);

知道怎么做吗?

【问题讨论】:

  • 您是如何提交和序列化模型的?
  • json 来自 FromData
  • 在反序列化时会将字段视为字符串 PrimaryBuyerInformation.BuyerFirstName
  • @viveknuna 是的,你是对的,有什么方法可以对它进行反序列化吗?

标签: c# json serialization deserialization json-deserialization


【解决方案1】:

请从下面的代码中获取提示,我对其进行了测试,您应该能够根据要求获得您的价值。这解决了您尝试访问以点属性名称格式映射的属性的问题。

相反,您的对象应该嵌套在一个大括号中,表明另一个属性属于 PrimaryBuyerInformationInputModel,它完全是另一个对象。

最好的问候,

using System;
using System.Collections.Generic;
using Newtonsoft.Json;

public class Program
{
    public static void Main()
    {
        var json = @"{'PrimaryBuyerInformation': {'buyerFirstName': 'Sunil','buyerMiddleInitial': '','buyerLastName': 'Choudhary'},'termsCondition': false}";

        var obj = JsonConvert.DeserializeObject<YourInformationInputModel>(json);
            Console.WriteLine(obj.PrimaryBuyerInformation.BuyerFirstName);


    }
}
public class YourInformationInputModel
    {
        public YourInformationInputModel()
        {           
            PrimaryBuyerInformation = new PrimaryBuyerInformationInputModel();          
        }

        public PrimaryBuyerInformationInputModel PrimaryBuyerInformation { get; set; } 

        public bool TermsCondition { get; set; }
    }

public class PrimaryBuyerInformationInputModel
    {
        public string BuyerFirstName { get; set; }
        public string BuyerMiddleInitial { get; set; }
        public string BuyerLastName { get; set; }
    }

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多