如何使用构造函数创建一个C#类并让它返回一个字符串?

时间:2014-06-22 06:59:40

标签: c#

我创建了以下内容:

public class HttpException
{
    public string Text { get; set; }
    public string Message { get; set; }
    public string InnerExceptionMessage { get; set; }
    public string InnerExceptionInnerExceptionMessage { get; set; }
}

我这样叫这个班:

var e = new HttpException() {
    Text = "City not created",
    Message = ex.Message,
    InnerExceptionMessage = ex.InnerException.Message,
    InnerExceptionInnerExceptionMessage = ex.InnerException.InnerException.Message
};
var jsonMsg = JSON.ToJSONString(e);

有没有办法可以实现,所以我可以只用文本消息的参数和异常来调用类 然后让它返回一个字符串jsonMsg

请注意,JSON.ToJSONString(e)是我用来形成JSON字符串的外部类。

4 个答案:

答案 0 :(得分:3)

你是说你想要这样的构造函数?

public class HttpException 
{
    public string Text { get; private set; }
    private readonly Exception ex;
    public string Message { get { return this.ex.message; } }
    public string InnerExceptionMessage { get { return this.ex.... } }
    public string InnerExceptionInnerExceptionMessage { get { return this.ex....} }

    public HttpException(string text, Exception ex)
    {
        this.Text = text;
        this.Exception = ex;
    }
}

我仍然不会将JSON代码放在那里,这是一个单独的问题,你通常不希望将序列化代码与常规类代码混合。

答案 1 :(得分:1)

您可以使用隐式运算符对类进行隐式转换,如下所示:

    public static void Main()
    {
        HttpException ex = new HttpException ();
        string text = ex;
        Console.WriteLine(text);
        Console.ReadLine();
    }


    public class HttpException 
    {
        public string Text = "goofy";

        public static implicit operator string(HttpException ex)
        {
            return ex.Text;
        }
    }

说明:

  • 隐式运算符不会停止为字符串,你可以进行任何你想要的演员表。

  • 您可以使用显式运算符执行可能更具可读性的显式转换string test = (string)goofy;

使用隐式运算符的缺点:

  • 它几乎无法被发现(来自与你不同的人很难找到这个"功能"如果你从一个月拿出代码,你自己可能会忘记这一点从现在开始。)

  • 它使代码更难阅读(有人可能知道这里到底发生了什么)。

  • 容易出错。

答案 2 :(得分:0)

正如zzzzBov所提到的,你可以简单地覆盖ToString()方法。 但是,如果此对象的唯一用途是创建json字符串,我会考虑创建这样的类:

public class HttpException
{
    public string Text { get; set; }
    public string Message { get; set; }
    public string InnerExceptionMessage { get; set; }
    public string InnerExceptionInnerExceptionMessage { get; set; }

    public static string CreateJsonString(string Text, string Message, 
                                          string InnerExceptionMessage, 
                                          string InnerExceptionInnerExceptionMessage) {
        return JSON.ToJSONString(new HttpException() {
                                     Text = "City not created",
                                     Message = ex.Message,
                                     InnerExceptionMessage = ex.InnerException.Message,
                                     InnerExceptionInnerExceptionMessage = 
                                     ex.InnerException.InnerException.Message});
   }
}

然后你需要在你的代码中写下:

var jsonMsg = HttpException.CreateJsonString("City not created", 
                                              ex.Message,
                                              ex.InnerException.Message,
                                              ex.InnerException.InnerException.Message
                                             );

答案 3 :(得分:0)

Implicit operators

public static implicit operator string(HttpException exception)
{
    return JSON.ToJSONString(e);
}

这隐含地将HttpException转换为幕后的字符串,所以现在你可以这样做:

string json = new HttpException();