小编Ali*_*tad的帖子

带有C#信封的对象的XML序列化

我需要在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)

当我将类型的对象分配PersonWrappedObject,我得到以下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)

c# xml serialization xml-serialization

7
推荐指数
1
解决办法
2281
查看次数

使用RsaProtectedConfigurationProvider加密/解密app.config部分

在我们的程序安装过程中,我们运行此方法来加密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密钥容器 ".

当然,我搜索并找到了这个帮助,但这不起作用.有任何想法吗?

c# encryption configuration rsa

6
推荐指数
2
解决办法
1万
查看次数

将Massive列表传递给MVC3中的View

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如何交互.

谢谢!

c# asp.net-mvc asp.net-mvc-3

6
推荐指数
2
解决办法
5786
查看次数

使用HttpRequestMessage.Properties承载每个请求上下文

在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

6
推荐指数
1
解决办法
7511
查看次数

内存分析.NET 3.5运行进程

是否有一个工具可以附加到.NET 3.5中正在运行的进程并拍摄快照?

我查看了.NET内存分析器,dotTrace内存RedGate ANTS分析器,但似乎没有人能够做到这一点.

.NET内存分析器和ANTS只能附加到.NET 4.0进程,而dotTrace内存似乎无法附加到正在运行的进程.


UPDATE

操作系统是Windows Server 2003(R2).

.net memory performance profiling memory-leaks

6
推荐指数
1
解决办法
1887
查看次数

泛型类型中的C#多态

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的子类'

c# generics polymorphism

5
推荐指数
1
解决办法
1535
查看次数

为什么这个Sql语句(带有2个表连接)需要5分钟才能完成?

更新:下面添加了3个更新

以下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)

更新#2 - 添加非聚集索引后

添加非聚集索引后,它现在下降到4秒!哪个很棒.但为什么 …

sql sql-server performance sql-server-2008

5
推荐指数
1
解决办法
288
查看次数

ASP NET MVC:动态添加或删除表单上的输入-不打扰的验证

在开始之前,我确实有一个非常特殊的问题,如果您想回答,请直接结束。但是,我很欢迎提出评论和建议,因此冗长的帖子。

好的,我们处理很多表格,其中一些表格很冗长,并且涉及很多领域。除顶层字段外,我们还要求能够具有可变数量的重复行(如我们所说)。例如,让我们考虑一个具有名称,姓氏和年龄的客户,而该客户可以有零个或多个地址(例如0到10),因此用户在填写表单时必须能够从表单中添加或删除联系人。因此,通常用户获取并通过“添加”按钮添加更多地址,并在每个地址旁边添加一个删除按钮。可能会有多个重复的部分以相同的形式出现,但我不会去那里。关键是,由于法律和历史原因,必须立即保存所有表格,以便可以编辑表格,

我将ASP NET MVC 2(具有单个通用控制器的强类型视图)与客户端验证和繁重的jquery脚本结合使用,以实现出色的功能。我们可能很快就要迁移到ASP NET MVC 3了,为了找到一个好的解决方案,我已经在和3一起玩了。这些地址在模型上定义为List<Address>,例如

我目前对此问题有一个可行的解决方案,但对此不满意:我有一个HTML帮助器,用于命名添加或删除按钮以及一些JavaScript以禁用验证并允许将表单回发(甚至无效),并且因为我可以找到被单击的按钮的名称,所以我拥有处理添加或删除的所有必要逻辑,并且工作得很好。

但是我发回了邮件,重新加载了表格,我正在寻找一种替代性的解决方案。这是我可以做的:

  • 在客户端执行所有操作。“添加”按钮将克隆此类地址之一,而“删除”按钮将克隆remove()元素。我只需要重命名已完成的索引。我们使用的是jquery日历,它破坏了我也已修复的新元素。但是验证无法正常工作,该验证可能可以与ASP NET MVC一起使用,但是此解决方案看起来像一个非常脆弱的解决方案-一屋一卡通,在添加另一张卡之前看起来不错。
  • 使用Ajax将整个页面发布,然后再次加载:这可能比我当前的解决方案更好,但略有改善。
  • 使用ajax发布表单并获取JSON并使用数据来构建元素或将其删除:由于大量的客户端脚本编写,因此再次成为了纸牌屋
  • 序列化表单,并使用Ajax将其发布到特定操作,并仅获取重复部分(作为局部视图)。可以重复使用控制器上的操作,并从视图本身调用该操作以返回部分视图

    好的,最后一个是我正在处理的一个,但是有一个问题。只有在一段BeginForm()时间内将表单吞没后,带有非侵入式验证的ASP NET MVC 3才起作用,而我的顶层视图只有BeginForm()局部视图,而没有局部视图。当我从视图中调用它时效果很好,但在ajax调用中却无法获得重复部分。

(题)

那么有没有办法告诉ASP NET MVC 3吐出验证数据属性,而不管它们是否位于BeginForm()块中?老实说,如果这不是错误,那么这绝对是一项重要的功能要求。实际上,我已经使用反射器反汇编了代码,而且情况似乎就在那里。

validation asp.net-mvc unobtrusive-javascript asp.net-mvc-3

5
推荐指数
1
解决办法
2425
查看次数

c#中的字符串操作

我有一个像这样的字符串,这是由一些反斜杠分隔的一些名称:

string mainString = @"Sean\John\Rob\fred";
Run Code Online (Sandbox Code Playgroud)

如何获得上面字符串格式的姓氏,在本例中为"fred",而我希望名称是字符串中的姓氏(在所有反斜杠之后)?

谢谢.

.net c# string

5
推荐指数
3
解决办法
2481
查看次数

调用 ReadAsFormDataAsync 两次

我面临的情况是,我必须从 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# asp.net-web-api

5
推荐指数
1
解决办法
3754
查看次数