1 ضمیمه
چرا JsonConvert مقدار Property را تغییر میده؟
سلام خدمت دوستان
یک مقدار رشته ای بافرمت Json بصورت زیر دارم:
{
"value": {},
"hasValue": false,
"isSuccess": true,
"isFail": false,
"messages": [],
"hasMessage": false
}
با استفاده از دستور زیر مقدار برگشتی را به مدل مورد نظر تبدیل می کنم:
JsonConvert.DeserializeObject<Shared.ApiResponse<M ediatR.Unit>>(content);
ولی نتیجه چیزدیگه ای شده و مقدار isSuccess شده false و مقدرا isFail شده true:
ضمیمه 155668
علت این مغایرت چیه؟ ممنون میشم اگر راهنمایی کنید. تشکر
نقل قول: چرا JsonConvert مقدار Property را تغییر میده؟
تنظیمات حروف اول کوچک یا بزرگ شاید تاثیر داشته باشد. این مورد میشه در Program.cs تنظیم کرد
https://json2csharp.com/
نقل قول: چرا JsonConvert مقدار Property را تغییر میده؟
کدهای کلاس ApiResponse بصورت زیر است:
public class ApiResponse<T>
{
public ApiResponse()
{
_messages = new List<ApiResponseMessage>();
}
private T? _value;
public T? Value
{
get { return _value; }
set
{
_value = value;
HasValue = !(value is null);
IsSuccess = true;
}
}
public bool HasValue { get; set; }
private bool _isSuccess;
public bool IsSuccess
{
get { return _isSuccess; }
set
{
_isSuccess = true;
_isFail = false;
}
}
private bool _isFail;
public bool IsFail
{
get { return _isFail; }
set
{
_isFail = true;
_isSuccess = false;
}
}
private IList<ApiResponseMessage>? _messages;
public IList<ApiResponseMessage> Messages
{
get { return _messages; }
}
public bool HasMessage { get; set; }
#region Messages
public void AddErrorMessage(Abstractions.Exceptions.CaspianExc eption caspianException)
{
_messages?.Add(new ApiResponseMessage
{
Type = nameof(ApiResponseMessageEnum.Error),
Message = caspianException.Message,
});
HasMessage = true;
IsFail = true;
}
public void AddWarningMessage(Abstractions.Exceptions.CaspianE xception caspianException)
{
_messages?.Add(new ApiResponseMessage
{
Type = nameof(ApiResponseMessageEnum.Warning),
Message = caspianException.Message,
});
HasMessage = true;
}
public void AddDangerMessage(Abstractions.Exceptions.CaspianEx ception caspianException)
{
_messages?.Add(new ApiResponseMessage
{
Type = nameof(ApiResponseMessageEnum.Danger),
Message = caspianException.Message,
});
HasMessage = true;
}
public void AddInformationMessage(Abstractions.Exceptions.Casp ianException caspianException)
{
_messages?.Add(new ApiResponseMessage
{
Type = nameof(ApiResponseMessageEnum.Information),
Message = caspianException.Message,
});
HasMessage = true;
}
public void ClearMessages()
{
_messages?.Clear();
HasMessage = false;
}
#endregion
public class ApiResponseMessage
{
public string Type { get; set; } = string.Empty;
public string Message { get; set; } = string.Empty;
}
public enum ApiResponseMessageEnum
{
Error,
Warning,
Danger,
Information
}
}
نقل قول: چرا JsonConvert مقدار Property را تغییر میده؟
آنچه که از پاسخ در StackOverflow متوجه شدم Setterها ایراد داشتند. در نتیجه نسخه نهایی کلاس بصورت زیر شد:
public class ApiResponse<T>
{
public ApiResponse()
{
_messages = new List<ApiResponseMessage>();
}
private T? _value;
public T? Value
{
get { return _value; }
set
{
_value = value;
HasValue = !(value is null);
IsSuccess = true;
}
}
public bool HasValue { get; set; }
private bool _isSuccess;
public bool IsSuccess
{
get { return _isSuccess; }
set
{
_isSuccess = value;
if (value)
HasError = false;
}
}
private bool _hasError;
public bool HasError
{
get { return _hasError; }
set
{
_hasError = value;
if (value)
IsSuccess = false;
}
}
private IList<ApiResponseMessage>? _messages;
public IList<ApiResponseMessage> Messages
{
get { return _messages; }
}
public bool HasMessage { get; set; }
#region Messages
public void AddErrorMessage(Abstractions.Exceptions.CaspianExc eption caspianException)
{
_messages?.Add(new ApiResponseMessage
{
Type = nameof(ApiResponseMessageEnum.Error),
Message = caspianException.Message,
});
HasMessage = true;
HasError = true;
}
public void AddWarningMessage(Abstractions.Exceptions.CaspianE xception caspianException)
{
_messages?.Add(new ApiResponseMessage
{
Type = nameof(ApiResponseMessageEnum.Warning),
Message = caspianException.Message,
});
HasMessage = true;
}
public void AddDangerMessage(Abstractions.Exceptions.CaspianEx ception caspianException)
{
_messages?.Add(new ApiResponseMessage
{
Type = nameof(ApiResponseMessageEnum.Danger),
Message = caspianException.Message,
});
HasMessage = true;
}
public void AddInformationMessage(Abstractions.Exceptions.Casp ianException caspianException)
{
_messages?.Add(new ApiResponseMessage
{
Type = nameof(ApiResponseMessageEnum.Information),
Message = caspianException.Message,
});
HasMessage = true;
}
public void ClearMessages()
{
_messages?.Clear();
HasMessage = false;
}
#endregion
public class ApiResponseMessage
{
public string Type { get; set; } = string.Empty;
public string Message { get; set; } = string.Empty;
}
public enum ApiResponseMessageEnum
{
Error,
Warning,
Danger,
Information
}
}
نقل قول: چرا JsonConvert مقدار Property را تغییر میده؟
از کلاس ApiResponse برای نوع برگشتی از تمامی Apiها استفاده میکنم.
نقل قول: چرا JsonConvert مقدار Property را تغییر میده؟
builder.Services.AddControllersWithViews()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNameCaseInse nsitive = true;
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});
builder.Services.AddControllersWithViews().AddNewt onsoftJson(options => { options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; });
نقل قول: چرا JsonConvert مقدار Property را تغییر میده؟
تشکر جناب فخرآوری. سوالم این بود که NameCaseSensitive برای Front کارها مهمه؟
نقل قول: چرا JsonConvert مقدار Property را تغییر میده؟
نقل قول:
نوشته شده توسط
mmbguide
تشکر جناب فخرآوری. سوالم این بود که NameCaseSensitive برای Front کارها مهمه؟
اره. در هر زبانی یه مشکلاتی برای map کردن پیش میاد