C# 在WebServices中将CultureInfo值存储为会话格式
正如标题所说,我试图创建一个CultureInfo对象,并将其值保存在会话中。并在方法中使用保存的CultureInfo对象作为返回值。但我得到了这个错误,我找不到解决办法!请看一看 类别:C# 在WebServices中将CultureInfo值存储为会话格式,c#,.net,web-services,session,cultureinfo,C#,.net,Web Services,Session,Cultureinfo,正如标题所说,我试图创建一个CultureInfo对象,并将其值保存在会话中。并在方法中使用保存的CultureInfo对象作为返回值。但我得到了这个错误,我找不到解决办法!请看一看 类别: public class DateTimeService : WebService { [WebMethod(EnableSession = true)] [ScriptMethod(UseHttpGet = true)] public string FormatDate(strin
public class DateTimeService : WebService
{
[WebMethod(EnableSession = true)]
[ScriptMethod(UseHttpGet = true)]
public string FormatDate(string dateString)
{
DateTime date;
var ci = new CultureInfo(Session["Format"].ToString()); //Culture is not supported.
var formats = Session["Format"].ToString();
DateTime.TryParseExact(dateString, formats, ci, DateTimeStyles.None, out date);
return date.ToString(ci);
}
[WebMethod(EnableSession = true)]
[ScriptMethod(UseHttpGet = true)]
public void SetFormat(string formatString)
{
Session["Format"] = formatString;
}
[WebMethod(EnableSession = true)]
[ScriptMethod(UseHttpGet = true)]
public void SetCulture(string language)
{
if (language == "sv-SE")
{
Session["CultureValue"] = new CultureInfo("sv-SE", false);
}
if (language == "en-US")
{
Session["CultureValue"] = new CultureInfo("en-US", false);
}
}
Global.asax(其中应用默认会话值):
非常感谢您的帮助 两个问题:
您使用的是“Format”会话变量,它不应该是“CultureValue”变量吗
您应该强制转换会话变量
我也不明白这有什么意义:
public void SetCulture(string language)
{
if (language == "sv-SE")
{
Session["CultureValue"] = new CultureInfo("sv-SE", false);
}
if (language == "en-US")
{
Session["CultureValue"] = new CultureInfo("en-US", false);
}
}
除非您想限制允许使用哪些“语言”(实际上它们是“languagecode2国家/地区代码2”格式的CultureInfo名称),否则此代码不是很有用,可以简化为:
public void SetCulture(string language)
{
Session["CultureValue"] = CultureInfo.CreateSpecificCulture(language);
}
你到底有什么问题?哪一行代码给了您一个例外?您似乎试图根据日期格式字符串创建一个
CultureInfo
,例如ddMMYYYY
。我将会话[“format”]更改为会话[“CultureValue”],现在我得到一个:“对象引用未设置为对象的实例。”错误。我更改了会话,现在它显示。“对象引用未设置为对象的实例。”不过,我不明白你的第二个问题解决方案是什么意思。您是否可以更具体一些=您需要执行var ci=(CultureInfo)会话[“CultureValue”]
但是,在执行此操作之前,您当然需要检查会话[“CultureValue”]
是否不为空。何时调用SetCulture(字符串语言)
?当用户使用某种语言键入时,将调用SetCulture方法。因此:“var ci=(CultureInfo)会话[“CultureValue”];”仍然为空。为什么?如果我是你,我会在Session\u Start
中设置一个默认的Session[“CultureValue”]
,这样你就可以确保在使用它时有一个值。与会话[“Format”]
的逻辑相同。好的,我给了它一个默认值,但后来我得到了这个错误。无法在“var ci=(CultureInfo)会话[“CultureValue”];”处将类型为“System.String”的对象强制转换为类型为“System.Globalization.CultureInfo”。。。
public void SetCulture(string language)
{
if (language == "sv-SE")
{
Session["CultureValue"] = new CultureInfo("sv-SE", false);
}
if (language == "en-US")
{
Session["CultureValue"] = new CultureInfo("en-US", false);
}
}
public void SetCulture(string language)
{
Session["CultureValue"] = CultureInfo.CreateSpecificCulture(language);
}