繁体   English   中英

Json没有正确反序列化为模型C#

[英]Json not correctly deserialized to model c#

我想将jsonstring反序列化为c#中的模型时遇到此问题。 由于某种原因,它不能正确地序列化所有属性。

当它是纯文本或shortdatestring时,某些属性突然变为0。

您可以在下面找到我的模型和一些屏幕截图。

 public class AdvancedExportViewModel
{

    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string Gender { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public string IdentificationNumber { get; set; }
    public string BirthDate { get; set; }
    public string Address { get; set; }
    public string Zip { get; set; }
    public string City { get; set; }

    public string DiveLicense { get; set; }
    public string OtherLicenses { get; set; }
    public string FederationNumber { get; set; }

    public string MembershipDate { get; set; }
    public string MedicalDate { get; set; }
    public string MembershipType { get; set; }
    public List<MemberCustomFieldViewModel> MemberCustomFields { get; set; }
    public List<MembershipCustomFieldViewModel> MembershipCustomFields { get; set; }

}


public class MembershipCustomFieldViewModel
    {
        public int Id { get; set; }
        public int CustomFieldId { get; set; }
        public bool CustomFieldYearDependent { get; set; }
        public string CustomFieldName { get; set; }
        public CustomFieldsTypesDTO CustomFieldType { get; set; }
        public string AccountId { get; set; }
        public string Value { get; set; }
        public bool BoolValue
        {
            get { return Value == "1"; }
            set { Value = value ? "1" : "0"; }
        }
    }

问题位于CustomFieldViewModel的“字符串值”属性中。

这是我的JSON,正如你所看到的Value属性有了不同的值(字符串,shortdatetimestring和布尔作为字符串) 的Json这是我反序列化的Json到我的模型正如你所看到的,值已成为“0” 反序列化模型

我如何反序列化Json,您将在下面找到: List<AdvancedExportViewModel> model = JsonConvert.DeserializeObject<List<AdvancedExportViewModel>>(exportModel);

DeserializeObject方法中提供的对象(exportModel)是Json字符串偏离路线。 我希望一切都清楚。

更改以下代码:

public bool BoolValue
{
    get { return Value == "1"; }
    set { Value = value ? "1" : "0"; }
}

至:

public bool BoolValue
{
    get;
    set;
}

然后再试一次。

    public bool BoolValue
    {
        get { return Value == "1"; }
        set { Value = value ? "1" : "0"; }
    }

您正在检查Value等于您的bool值(在您的示例中始终为false),其中Value是字符串Test或日期。 该语句将始终为false,因此将Value设置为0。为什么不像其他BoolValue一样将BoolValue属性设置为auto属性呢?

public bool BoolValue { get; set; }

另请参阅此内容,以了解有关为什么结果的更多信息。

Value = value ? "1" : "0" 

返回“ 0”

BoolValue属性只是返回值,不需要设置。

删除属性设置器:

public bool BoolValue
{
    get { return Value == "1"; }
}

另外,我认为其逻辑应更改如下:

public bool BoolValue
{
    get { return Value == "1" || Value == "0"; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM