我正在尝试将一些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>,而这并不是我需要的.
有没有人有任何想法?
我正在努力解决这个问题.在我的本地计算机(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) 我正在使用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) 我正在使用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> …
我正在尝试使用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 …
我正在使用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# ×4
tridion ×3
api ×1
dapper ×1
jquery ×1
json ×1
null ×1
tridion-2011 ×1
tridion2009 ×1
xml ×1