Как установить значение по умолчанию в анонимном классе, если какое-либо свойство имеет значение null; - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть класс следующим образом.

public class CommonResponse<T>
{
    public HttpStatusCode ResponseCode { get; set; }
    public string ResponseMessage { get; set; }
    public T data { get; set; }
}

есть следующая опция.

//1. 
CommonResponse<string> obj1=new CommonResponse<string>(){ResponseCode=200, ResponseMessage="OK", data=null};
//2. 
CommonResponse<string> obj2=new CommonResponse<class1>(){ResponseCode=200, ResponseMessage="OK", data=new class1{p1="", p2=null, p3=null}};
//3. 
CommonResponse<string> obj3=new CommonResponse<class2>(){ResponseCode=200, ResponseMessage="OK", data=null};

Я ищу код, который преобразует каждое нулевое значение в значение по умолчанию. значения по умолчанию следующие:

1 type (string) = string.empty;

2 type (int) = 0;

et c.

я пытаюсь следующий код. но он не работает.

public class CommonResponse<T>
{
    private T _data { get; set; }

    public HttpStatusCode ResponseCode { get; set; }
    public string ResponseMessage { get; set; }



    public T data
    {
        get
        {
            if (_data != null)
            {
                PropertyInfo[] properties =
                _data.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

                foreach (var item in properties)
                {
                    if (item.PropertyType == typeof(string))
                    {
                        var value = item.GetValue(_data, null);

                        if (value == null)
                        {
                            item.SetValue(_data, Convert.ChangeType(string.Empty, item.PropertyType), null);
                        }
                    }
                    if (item.PropertyType == typeof(int))
                    {
                        var value = item.GetValue(_data, null);

                        if (value == null)
                        {
                            item.SetValue(_data, Convert.ChangeType(0, item.PropertyType), null);
                        }
                    }
                }

                return _data;
            }
            else
            {

                return (T)Convert.ChangeType(string.Empty, typeof(T));
            }
        }
        set
        {
            _data = value;
        }
    }
}

мне нужен следующий вывод

//1.
obj1={ResponseCode=200, ResponseMessage="OK", data=""};

//2.
obj2={ResponseCode=200, ResponseMessage="OK", data=new class1{p1="", p2="", p3=0}};

//3.
obj3={ResponseCode=200, ResponseMessage="OK", data=""};

например

public class class1
{
    public string p1{get;set;}
    public string p1{get;set;}
    public int? p3{get;set;}
}

CommonResponse<string> obj2=new CommonResponse<class1>(){ResponseCode=200, ResponseMessage="OK", data=new class1{p1="hello", p2=null, p3=null}};
var json = new JavaScriptSerializer().Serialize(obj2);

Console.WriteLine(json);

вывод следующий

{"ResponseCode": "200", "ResponseMessage": "OK", данные: {"p1": "hello", "p2": null, "p3": null}}

Есть два пустых поля p2 и p3

Мне нужно, чтобы каждое нулевое значение преобразовывалось в пустую строку. желаемый вывод выглядит следующим образом.

{"ResponseCode": "200", "ResponseMessage": "OK", данные: {"p1": "hello", "p2": "", "p3 ":" 0 "}}

1 Ответ

2 голосов
/ 12 февраля 2020

Кажется, вы не используете set правильно, поэтому данные всегда равны нулю.

Вы должны изменить

set
{
    _data = data;
}

на:

set
{
    _data = value;
}
...