Json未正确反序列化到模型c#
当我想将jsonstring反序列化到c#中的模型时,我遇到了这个问题。 由于某些原因,它没有正确序列化所有属性 当某些属性是纯文本或shortdatestring时,它会突然变为0 下面是我的模型和一些截图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
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"; }
}