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

Json未正确反序列化到模型c#,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,当我想将jsonstring反序列化到c#中的模型时,我遇到了这个问题。 由于某些原因,它没有正确序列化所有属性 当某些属性是纯文本或shortdatestring时,它会突然变为0 下面是我的模型和一些截图 public class AdvancedExportViewModel { public string LastName { get; set; } public string FirstName { get; set; } public string Gen

当我想将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"; }
        }
    }
公共类AdvancedExportViewModel
{
公共字符串LastName{get;set;}
公共字符串名{get;set;}
公共字符串{get;set;}
公共字符串电子邮件{get;set;}
公共字符串PhoneNumber{get;set;}
公共字符串标识号{get;set;}
公共字符串生日{get;set;}
公共字符串地址{get;set;}
公共字符串Zip{get;set;}
公共字符串City{get;set;}
公共字符串DiveLicense{get;set;}
公共字符串OtherLicenses{get;set;}
公共字符串FederationNumber{get;set;}
公共字符串成员身份日期{get;set;}
公共字符串MedicalDate{get;set;}
公共字符串成员类型{get;set;}
公共列表成员自定义字段{get;set;}
公共列表成员身份自定义字段{get;set;}
}
公共类成员身份CustomFieldViewModel
{
公共int Id{get;set;}
public int CustomFieldId{get;set;}
公共bool CustomFieldYearDependent{get;set;}
公共字符串CustomFieldName{get;set;}
公共CustomFieldStypedTo CustomFieldType{get;set;}
公共字符串AccountId{get;set;}
公共字符串值{get;set;}
公共布尔布尔值
{
获取{返回值==“1”;}
设置{Value=Value?“1”:“0”}
}
}
问题位于CustomFieldViewModel的“字符串值”属性中

这是我的Json,您可以看到Value属性有不同的值(string、shortdatetimestring和boolean as string) 下面是我的模型上的反序列化Json 如您所见,值已变为“0”

我如何反序列化我的Json,您可以在下面找到:
List model=JsonConvert.DeserializeObject(exportModel)

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

更改以下代码:

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

然后再试一次

    public bool BoolValue
    {
        get { return Value == "1"; }
        set { Value = value ? "1" : "0"; }
    }
您正在检查
Value
是否等于bool值,在您的示例中,bool值始终为false,其中
Value
是字符串
Test
或日期。该语句将始终为false,因此它将
Value
设置为0。为什么不把
BoolValue
属性和其他属性一样变成自动属性呢

public bool BoolValue { get; set; }
另请参阅,以获取有关以下原因的更多信息:

Value = value ? "1" : "0" 

返回“0”

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

删除属性设置程序:

public bool BoolValue
{
    get { return Value == "1"; }
}
此外,我认为其逻辑应该改变如下:

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

这就是问题所在!我将它稍微修改为
public bool BoolValue{get{return Value==“1”}set{if(CustomFieldType.Equals(customfieldstypedto.checkbox)){Value=Value?:“0”}else{Value=Value;}}}
现在我得到了正确的值!非常感谢!
public bool BoolValue
{
    get { return Value == "1" || Value == "0"; }
}