我创建了以下内容:
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字符串的外部类。
答案 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)
public static implicit operator string(HttpException exception)
{
return JSON.ToJSONString(e);
}
这隐含地将HttpException
转换为幕后的字符串,所以现在你可以这样做:
string json = new HttpException();