2017-06-01 39 views
0

我有這個問題,當我想反序列化一個jsonstring在c#中的模型。 由於某些原因,它不能正確序列化所有屬性。Json未正確反序列化爲模型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屬性有了不同的值(字符串,shortdatetimestring和布爾作爲字符串) Json 這裏是我的反序列化的Json到我的模型 正如你所看到的,值已成爲 「0」 deserialized model

如何反序列化的json你會發現下面: List<AdvancedExportViewModel> model = JsonConvert.DeserializeObject<List<AdvancedExportViewModel>>(exportModel);

在DeserializeObject方法給出的對象(exportModel)是一個JSON字符串offcourse。 我希望這一切都很清楚。

回答

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

您檢查是否Value等於你的布爾值,其在你的榜樣永遠是假的,其中Value或者是串Test或日期。該聲明將永遠是假的,所以它設置Value爲0。你爲什麼不使BoolValue屬性自動屬性像他們的休息...

public bool BoolValue { get; set; } 

另見this的,爲什麼更多信息的

Value = value ? "1" : "0" 

結果將返回「0」

+0

這是問題!我修改了一下這個'公共布爾BoolValue {{0} {返回值==「1」; }如果(CustomFieldType.Equals(CustomFieldsTypesDTO.checkbox)) Value = value?} set { if「1」:「0」; } else { Value = Value; } } }'現在我得到正確的值!非常感謝! – Nico

0

更改下面的代碼:

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

到:

public bool BoolValue 
{ 
    get; 
    set; 
} 

,然後再試一次。

0

BoolValue屬性只是返回值,它並不需要設置。

刪除屬性setter:

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

另外,我覺得它的邏輯應該改變如下:

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