我需要在C#中将对象序列化为XML.物体应包裹在信封中.为此,我创建了以下Envelope类:
[XmlInclude(typeof(Person))]
public class Envelope
{
public string SomeValue { get; set; }
public object WrappedObject { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我使用以下代码序列化类:
string fileName = ...;
XmlSerializer serializer = new XmlSerializer(typeof(Envelope));
TextWriter textWriter = new StreamWriter(fileName);
try
{
serializer.Serialize(textWriter, <instance of envelope>);
}
finally
{
textWriter.Close();
}
Run Code Online (Sandbox Code Playgroud)
当我将类型的对象分配Person给WrappedObject,我得到以下XML:
<Envelope>
<SomeValue>...</SomeValue>
<WrappedObject xsi:type="Person">
....
</WrappedObject>
</Envelope>
Run Code Online (Sandbox Code Playgroud)
问题是,我希望包装对象的标签以我传入的实际类命名.例如,如果我分配了一个Personto 的实例WrappedObject,我希望XML看起来如下所示:
<Envelope>
<SomeValue>...</SomeValue>
<Person>
....
</Person>
</Envelope>
Run Code Online (Sandbox Code Playgroud)
如果我指定一个实例Animal,我想得到
<Envelope>
<SomeValue>...</SomeValue>
<Animal>
.... …Run Code Online (Sandbox Code Playgroud) 在我们的程序安装过程中,我们运行此方法来加密app.config的各个部分:
// Get the application configuration file.
Configuration config =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// Define the Rsa provider name.
const string provider = "RsaProtectedConfigurationProvider";
// Get the section to protect.
ConfigurationSection connStrings = config.ConnectionStrings;
if (connStrings != null)
{
if (!connStrings.SectionInformation.IsProtected)
{
if (!connStrings.ElementInformation.IsLocked)
{
// Protect the section.
connStrings.SectionInformation.ProtectSection(provider);
connStrings.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);
}
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止工作正常.但是如果我运行这个程序,我们会遇到几个机器出现以下错误"无法使用提供程序'RsaProtectedConfigurationProvider解密'.来自提供程序的错误消息:无法打开RSA密钥容器 ".
当然,我搜索并找到了这个帮助,但这不起作用.有任何想法吗?
ASP.NET MVC的新手(现在使用带Razor的MVC3),我很困惑将一个对象从Controller传递给View.具体来说,我正在试验MVC3和Rob Conery有趣的Massive(http://blog.wekeroad.com/helpy-stuff/and-i-shall-call-it-massive).我正在搞一个博客作为一个简单的Web应用程序来试验.
HomeController.cs:
public ActionResult Index()
{
var table = new DynamicModel("mydb", tableName: "Posts");
//grab all the posts
var posts = table.All();
ViewData["Posts"] = posts;
return View();
}
Run Code Online (Sandbox Code Playgroud)
这部分效果很好.但是我该怎么做?
return View(posts);
Run Code Online (Sandbox Code Playgroud)
如果我@posts.PostID在视图中引用,它会出错并说它无效.所以我尝试针对DynamicModel创建强类型视图,但posts仍然不存在.
我知道我可以创建一个ViewModel并针对该类型键入视图并将数据插入其中.这更多是关于理解Controller/View如何交互.
谢谢!
在Web API应用程序中,我使用Castle Windsor提供配置了PerWebRequest生命周期的服务,并且一切正常.
但是,当我使用ASP.NET Web API Self Host(Beta)包时,我需要创建一个自定义生命周期,以便根据HTTP请求确定这些服务的范围.
如何使用HttpRequestMessage.Properties携带每个请求上下文?
asp.net dependency-injection castle-windsor asp.net-mvc-4 asp.net-web-api
是否有一个工具可以附加到.NET 3.5中正在运行的进程并拍摄快照?
我查看了.NET内存分析器,dotTrace内存和RedGate ANTS分析器,但似乎没有人能够做到这一点.
.NET内存分析器和ANTS只能附加到.NET 4.0进程,而dotTrace内存似乎无法附加到正在运行的进程.
操作系统是Windows Server 2003(R2).
class Base
{}
class Sub : Base
{}
void AddNewBase(Base t, LinkedList<Base> list){ ... }
...
{
Sub asub = new Sub();
LinkedList<Sub> asubList = new LinkedList<Sub>();
AddNewBase(asub,asubList) // doesn't work
}
Run Code Online (Sandbox Code Playgroud)
基本上,我有一个自定义插入函数,它接受一个新项目和一个列表来放入它,它做了一些"排序"的东西,找到一个好的地方把它放在列表中.
问题是,我想基于'Base'中的属性来做这个,所以最好只有一个函数可以为所有子类型列表执行此操作.
我想我想要的是:
static void AddNewBase<T>(T t, LinkedList<T> list){ ... }
Run Code Online (Sandbox Code Playgroud)
但有一些澄清T的方式:'其中T是Base的子类'
以下sql语句需要5分钟才能完成.我只是.别.得到.它:(第一个表有6861534行.第二个表有一点点......第三个表(包含4个地理字段)与第一个表相同.
GEOGRAPHY第3个表中的那些字段..它们不应该与sql语句混乱......应该吗?可能是因为表太大(由于GEOGRAPHY字段),它有巨大的页面大小或什么东西..因此破坏COUNT的表扫描?
SELECT COUNT(*)
FROM [dbo].[Locations] a
inner join [dbo].[MyUSALocations] b on a.LocationId = b.LocationId
inner join [dbo].[GeographyBoundaries] c on a.locationid = c.LocationId
Run Code Online (Sandbox Code Playgroud)




根据要求,这里有一些关于GeographyBoundaries表的更多信息......

/****** Object: Index [PK_GeographyBoundaries] Script Date: 11/16/2010 12:42:36 ******/
ALTER TABLE [dbo].[GeographyBoundaries] ADD CONSTRAINT [PK_GeographyBoundaries] PRIMARY KEY CLUSTERED
(
[LocationId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
添加非聚集索引后,它现在下降到4秒!哪个很棒.但为什么 …
在开始之前,我确实有一个非常特殊的问题,如果您想回答,请直接结束。但是,我很欢迎提出评论和建议,因此冗长的帖子。
好的,我们处理很多表格,其中一些表格很冗长,并且涉及很多领域。除顶层字段外,我们还要求能够具有可变数量的重复行(如我们所说)。例如,让我们考虑一个具有名称,姓氏和年龄的客户,而该客户可以有零个或多个地址(例如0到10),因此用户在填写表单时必须能够从表单中添加或删除联系人。因此,通常用户获取并通过“添加”按钮添加更多地址,并在每个地址旁边添加一个删除按钮。可能会有多个重复的部分以相同的形式出现,但我不会去那里。关键是,由于法律和历史原因,必须立即保存所有表格,以便可以编辑表格,
我将ASP NET MVC 2(具有单个通用控制器的强类型视图)与客户端验证和繁重的jquery脚本结合使用,以实现出色的功能。我们可能很快就要迁移到ASP NET MVC 3了,为了找到一个好的解决方案,我已经在和3一起玩了。这些地址在模型上定义为List<Address>,例如
我目前对此问题有一个可行的解决方案,但对此不满意:我有一个HTML帮助器,用于命名添加或删除按钮以及一些JavaScript以禁用验证并允许将表单回发(甚至无效),并且因为我可以找到被单击的按钮的名称,所以我拥有处理添加或删除的所有必要逻辑,并且工作得很好。
但是我发回了邮件,重新加载了表格,我正在寻找一种替代性的解决方案。这是我可以做的:
remove()元素。我只需要重命名已完成的索引。我们使用的是jquery日历,它破坏了我也已修复的新元素。但是验证无法正常工作,该验证可能可以与ASP NET MVC一起使用,但是此解决方案看起来像一个非常脆弱的解决方案-一屋一卡通,在添加另一张卡之前看起来不错。序列化表单,并使用Ajax将其发布到特定操作,并仅获取重复部分(作为局部视图)。可以重复使用控制器上的操作,并从视图本身调用该操作以返回部分视图
好的,最后一个是我正在处理的一个,但是有一个问题。只有在一段BeginForm()时间内将表单吞没后,带有非侵入式验证的ASP NET MVC 3才起作用,而我的顶层视图只有BeginForm()局部视图,而没有局部视图。当我从视图中调用它时效果很好,但在ajax调用中却无法获得重复部分。
那么有没有办法告诉ASP NET MVC 3吐出验证数据属性,而不管它们是否位于BeginForm()块中?老实说,如果这不是错误,那么这绝对是一项重要的功能要求。实际上,我已经使用反射器反汇编了代码,而且情况似乎就在那里。
我有一个像这样的字符串,这是由一些反斜杠分隔的一些名称:
string mainString = @"Sean\John\Rob\fred";
Run Code Online (Sandbox Code Playgroud)
如何获得上面字符串格式的姓氏,在本例中为"fred",而我希望名称是字符串中的姓氏(在所有反斜杠之后)?
谢谢.
我面临的情况是,我必须从 ASP.NET Web API 中的传入请求读取表单数据两次(从模型绑定程序和过滤器)。我尝试过使用LoadIntoBufferAsync但没有运气。
// from model binder
Request.Content.LoadIntoBufferAsync().Wait();
var formData = Request.Content.ReadAsFormDataAsync().Result;
// from filter
var formData = Request.Content.ReadAsFormDataAsync().Result;
Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×2
asp.net-mvc ×2
performance ×2
asp.net ×1
encryption ×1
generics ×1
memory ×1
memory-leaks ×1
polymorphism ×1
profiling ×1
rsa ×1
sql ×1
sql-server ×1
string ×1
validation ×1
xml ×1