我正在使用DataContractJsonSerializer,它喜欢输出到Stream.我想要对串行器的输出进行顶部和尾部处理,因此我使用StreamWriter交替写入我需要的额外位.
var ser = new DataContractJsonSerializer(typeof (TValue));
using (var stream = new MemoryStream())
{
using (var sw = new StreamWriter(stream))
{
sw.Write("{");
foreach (var kvp in keysAndValues)
{
sw.Write("'{0}':", kvp.Key);
ser.WriteObject(stream, kvp.Value);
}
sw.Write("}");
}
using (var streamReader = new StreamReader(stream))
{
return streamReader.ReadToEnd();
}
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到一个ArgumentException"流不可读".
我可能在这里做错了所以所有答案都欢迎.谢谢.
我们的应用程序中有很多日志记录调用.我们的记录器采用System.Type参数,因此它可以显示创建调用的组件.有时候,当我们受到打扰时,我们会做以下事情:
class Foo
{
private static readonly Type myType = typeof(Foo);
void SomeMethod()
{
Logger.Log(myType, "SomeMethod started...");
}
}
Run Code Online (Sandbox Code Playgroud)
因为这只需要获取Type对象一次.但是,我们没有任何实际指标.任何人都知道这节省了多少调用this.GetType()每次我们登录?
(我意识到我可以自己完成指标并没有什么大问题,但是嘿,什么是StackOverflow?)
我正在做以下事情:
public static class DataHelper
{
public static List<Seller> Sellers = new List<Seller> {
{new Seller {Name = "Foo", Location = new LatLng {Lat = 12, Lng = 2}, Address = new Address {Line1 = "blah", City = "cokesville"}, Country = "UK"},
//plus 3500 more Sellers
};
}
Run Code Online (Sandbox Code Playgroud)
当我从MVC网站内部访问DataHelper.Sellers时,我得到一个StackOverflowException.当我使用Visual Studio进行调试时,堆栈只有六个帧,并且通常没有堆栈溢出的明显迹象(即没有重复的方法调用).
应用程序调用可以像这样简单,以引发异常:
public ActionResult GetSellers()
{
var sellers = DataHelper.Sellers;
return Content("done");
}
Run Code Online (Sandbox Code Playgroud)
额外信息:
我对这个问题的正确答案印象深刻!
.net中事件代理的标准模式有什么意义?即EventHandler预定义委托?为什么不选择最合适的签名?
编辑:此外,是否有必要在所有情况下盲目地遵循微软的例子?
我有一个带有DateTime搜索条件的搜索表单,以及其他一些标准:
<form method="get" action="/app/search">
<input type="text" value="13/01/2010" name="BeginDate"/>
<input type="text" value="blah" name="SomeOtherCriterion"/>
<form>
Run Code Online (Sandbox Code Playgroud)
所以我有一个带有默认Action(让我们称之为Index)和SearchCriteria参数的Search控制器.
public class SearchController
{
public ActionResult Index(SearchCriteria searchCriteria) {//blah }
}
public class SearchCriteria
{
public DateTime BeginDate {get; set;}
public string SomeOtherCriterion {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我想创建一个ActionLink,传入一个SearchCriteria值,这样:
Html.ActionLink("Search", "Index", searchCriteria)
Run Code Online (Sandbox Code Playgroud)
我以美国格式获取BeginDate查询字符串参数.在Google上查看并使用Reflector在System.Web.Routing中浏览它似乎是因为它使用了InvariantCulture,所以我无能为力.
似乎没有人问过这个问题所以我猜我做的事情非常愚蠢....请帮忙!
编辑:将SearchCriteria传递给ActionLink而不是匿名对象,以显示为什么我不能自己做自定义ToString().
我们正在开发一个新的电子商务网站,并且是第一次使用NHibernate.目前,我们将数据拆分为多个SQL Server数据库,按功能区域划分.所以我们有一个用于UserInfo,一个用于Orders,一个用于ProductCatalogue,依此类推......
我们做出这个决定的理由是双重的:
该网站有可能成为巨大的(它是英国最大的在线品牌之一的新网站),我们认为通过按功能划分我们的数据,我们将能够将数据库移动到他们自己的服务器上,这将是如果需要,给我们一个简单的缩放路线;
我的团队一直以这种方式工作 - 部分原因是遵循以前项目的MS Commerce Server模式.
然而,通过在互联网上阅读这一决定,我们发现对这种模式的正常反应非常严厉."现在为开发人员创建更多工作,以便以后为开发人员创建更多工作"是Stack Overflow的一个示例评论!
此外,只使用一个数据库(只需要一个SessionFactory),NHibernate更容易使用.并且知道Stack Overflow很长一段时间只用了一个盒子让我觉得也许我们不应该试着这么聪明.
因此,我的问题是,"我们是否正确地认为使用细粒度数据库可能会提高我们的扩展能力,或者我们应该为了更容易的开发而牺牲这种能力"?
database architecture sql-server database-design scalability
.net ×3
c# ×3
architecture ×1
asp.net-mvc ×1
database ×1
events ×1
performance ×1
scalability ×1
sql-server ×1
wcf ×1