Json未正确反序列化为c#模型

时间:2017-06-01 14:31:12

标签: c# json serialization json.net

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

当它是纯文本或短字符串时,某些属性突然变为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属性有不同的值(string,shortdatetimestring和boolean as string) Json 这是我的反序列化Json到我的模型 如您所见,值已变为“0” deserialized model

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

DeserializeObject方法中给出的对象(exportModel)是一个Json字符串offcourse。 我希望这一切都清楚。

3 个答案:

答案 0 :(得分:0)

更改以下代码:

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

为:

public bool BoolValue
{
    get;
    set;
}

再试一次。

答案 1 :(得分:0)

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

您正在检查Value是否等于您的bool值,在您的示例中该值始终为false,其中Value是字符串Test或日期。该陈述将始终为false,因此将Value设置为0.为什么不将BoolValue属性设置为与其余属性类似的自动属性...

public bool BoolValue { get; set; }

另请参阅this以获取有关

结果的更多信息
Value = value ? "1" : "0" 

正在返回&#34; 0&#34;

答案 2 :(得分:0)

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

删除属性设置器:

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

另外,我认为它的逻辑应该改变如下:

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