小编Jam*_*imm的帖子

在C#中将XML元素的存在反序列化为bool

我正在尝试将一些XML从Web服务反序列化为C#POCO.我已经将这个工作用于我需要的大多数属性,但是,我需要根据元素是否存在来设置bool属性,但似乎无法看到如何执行此操作?

一个示例XML片段:

<someThing test="true">
    <someThingElse>1</someThingElse>
    <target/>
</someThing>
Run Code Online (Sandbox Code Playgroud)

一个示例C#类:

[Serializable, XmlRoot("someThing")]
public class Something
{
    [XmlAttribute("test")]
    public bool Test { get; set; }

    [XmlElement("someThingElse")]
    public int Else { get; set; }

    /// <summary>
    /// <c>true</c> if target element is present,
    /// otherwise, <c>false</c>.
    /// </summary>   
    [XmlElement("target")]
    public bool Target { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我正在处理的实际XML和对象层次结构的一个非常简化的示例,但演示了我正在尝试实现的内容.

我读过的与反序列化null/empty元素相关的所有其他问题似乎都涉及到使用Nullable<T>,而这并不是我需要的.

有没有人有任何想法?

c# xml xml-deserialization deserialization

11
推荐指数
1
解决办法
3677
查看次数

如何通过JSON在ASP.NET MVC 3.0中返回错误的正确响应?

我正在努力解决这个问题.在我的本地计算机(Win7/VS2010/IIS 7.5)和另一台相同的开发人员的计算机上,以下代码返回500状态代码,响应文本显示"无法找到具有指定电子邮件地址的用户".

当我将站点部署到我的测试服务器(Win2008 R2/IIS7.5)时,它返回正确的状态代码,但内容类型设置为"text/html",而responseText不包含该消息.

我已经尝试关闭服务器上的自定义错误,这没有任何区别.谁能发现问题可能是什么?

我有一个使用AjaxHelper.BeginForm方法配置的表单:

@using (Ajax.BeginForm("FindUser", new AjaxOptions {OnSuccess="findComplete", OnFailure="findFailed"}) 
{
    <fieldset>
        @Html.EditorFor(m => m.UserEmail)
        <div class="form-item button search">
            <input type="submit" value="Find"/>
        </div>
        <div id="find-err" class="message error hidden">
            <div class="contents"></div>
        </div>
    </fieldset>
}
Run Code Online (Sandbox Code Playgroud)

使用错误处理javascript函数:

function findFailed(result) {
    var error = result.responseText;
    if (error) {
        $('#find-err .contents').text(error).slideDown();
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器操作捕获任何错误并返回一条消息:

[HttpPost]
public ActionResult FindUser(FindUserModel model) 
{
    try
    {
        // code to find user

        if (user == null) 
        {
            throw new Exception("Could not locate user with specified email address.");
        } …
Run Code Online (Sandbox Code Playgroud)

error-handling jquery json asp.net-mvc-3

10
推荐指数
1
解决办法
4762
查看次数

如何从Dapper查询而不是默认(T)返回null?

我正在使用Dapper通过存储过程进行一些只读数据库调用.我有一个查询将返回1行或没有.

我正在使用这样的Dapper:

using (var conn = new SqlConnection(ConnectionString))
{
    conn.Open();

    return conn.Query<CaseOfficer>("API.GetCaseOfficer", 
        new { Reference = reference }, 
        commandType: CommandType.StoredProcedure).FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)

返回的CaseOfficer对象如下所示:

public class CaseOfficer
{
    public string Title { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Telephone { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后通过ASP.NET Web API应用程序将其作为JSON返回.

当存储过程返回结果时,我得到以下内容:

{
    title: "Mr",
    firstName: "Case",
    lastName: "Officer",
    email: "test@example.com",
    telephone: "01234 567890" …
Run Code Online (Sandbox Code Playgroud)

c# null stored-procedures dapper

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

如何在Tridion 2011中获取组件UnPublish事件的(un-)PublicationTarget?

我正在使用Tridion 2011的事件系统在取消发布组件时执行一些额外的操作.我正在使用此处的代码发布相关组件.

我正在注册我的事件处理程序如下:

EventSystem.Subscribe<Component, UnPublishEventArgs>(
    RemoveAndRepublish, EventPhases.Initiated);
Run Code Online (Sandbox Code Playgroud)

...我的处理程序方法如下:

public void RemoveAndRepublish(Component cmp, UnPublishEventArgs args, 
                               EventPhases phase)
{
    // ... code to locate related component, and perform required actions...

    var instruction = new PublishInstruction(cmp.Session)
    {
        DeployAt = DateTime.Now,
        RenderInstruction = new RenderInstruction(cmp.Session)
        {
            RenderMode = RenderMode.Publish
        },
        ResolveInstruction = new ResolveInstruction(cmp.Session)
        {
            IncludeComponentLinks = true
        },
        RollbackOnFailure = true,
        StartAt = DateTime.MinValue
    };

    var target = args.Targets.FirstOrDefault();

    PublishEngine.Publish(new[] {related}, instruction, new[] {target});
}
Run Code Online (Sandbox Code Playgroud)

我的问题是UnPublishEventArgs.Targets属性是一个IList<PublishingTarget>,在运行时结果是一个List<TargetType> …

c# tridion tridion-2011

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

如何在Tridion 2009中启用用户进行模拟?

我正在尝试使用Tridion的ContentManagment API来检索分类法类别和关键字,但我遇到了Access denied错误.

我有以下方法:

public Dictionary<string, string> GetKeywords(string tcmUri)
{
     var result = new Dictionary<string, string>();

     try 
     {
         // _settings.ImpersonationUser = "MYDOMAIN/myusername"
         using (var session = new Session(_settings.ImpersonationUser))
         {
             var category = new Category(new TcmUri(tcmUri), session);
             var keywords = category.GetKeywords(new Filter());

             if (keywords != null && keywords.Count > 0)
             {
                 foreach (var keyword in keywords)
                 {
                     result.Add(keyword.Id.ToString(), keyword.Title);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Logger.Log.Error(
             "Failed to retrieve keywords for '{0}'.".FormatWith(tcmUri), ex);
     }

     return result;
}
Run Code Online (Sandbox Code Playgroud)

我加入的用户可以_settings.ImpersonationUser …

api impersonation tridion tridion2009

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

如何使用Tridion的出站电子邮件API检索联系人的关键字?

我正在使用Tridion.OutboundEmail.ContentManagement API来检索和管理联系人详细信息.

检索联系人工作正常,拉回ExtendedDetails字典,但关键字TcmUriCollection始终为空.

[Test]
public void GetContacts_via_address_book()
{
    var uri = new TcmUri(101, 2, TcmItemTypes.StaticAddressBook);
    var addressBook = new StaticAddressBook(uri);
    var contacts = addressBook.GetContacts();

    foreach (var contact in contacts) 
    {
        var firstName = contact.ExtendedDetails["NAME"].StringValue;

        Assert.That(contact.EmailAddress, Is.Not.Empty); // PASS
        Assert.That(firstName, Is.Not.Empty); // PASS
        Assert.That(contact.Keywords.Count, Is.GreaterThan(0)); // FAIL
    }
}
Run Code Online (Sandbox Code Playgroud)

我也试过以下方法:

[Test]
public void GetContacts_via_filter()
{
    var uri = new TcmUri(101, 2, TcmItemTypes.StaticAddressBook);
    var addressBook = new StaticAddressBook(uri);
    var filter = new ContactFilter(UserContext.Current);
    var contacts = Contact.GetContacts(filter, addressBook);

    foreach (var contact in …
Run Code Online (Sandbox Code Playgroud)

c# tridion

4
推荐指数
1
解决办法
362
查看次数