[英]ServiceStack - Access to the request DTO when using the built-in auth feature?
[英]When using servicestack deserializationToString to a DTO array, a null object is at the end of the list
我正在Visual Studio 2013上的C#中进行编码,并且尝试使用ServiceStack 3.9.71反序列化某些JSON。 它们包含在文件中(不受我的控制),当我尝试对其进行反序列化时,最终得到正确的DTO数组,但此外,在数组末尾有一个空对象。 我将其范围缩小到文件末尾的回车符(“ \\ r”)。 我可以做的一些解决方案是修剪字符串,或删除所有的“ \\ r”,或禁用GIT中的CRLF自动切换,并且在提交时要非常勤奋,但是,我觉得这似乎是“黑客”。 我觉得DeserializeFromString应该能够处理字符串末尾的回车符。 从好的方面来说,当我在OSX上运行相同的代码时,它工作得很好,因为该文件现在是Unix格式,仅使用换行符,而不使用回车和换行符的组合。
其他人看到了吗? 除了我提到的以外,还有其他推荐的修复程序吗?
为了证明这一点,我编写了一个简单的测试(Windows和OSX均失败)。
我的DTO:
class DeserializeTestData
{
public int someData { get; set; }
public String moreData { get; set; }
}
我的测试:
[Test]
public void ShouldNotContainNullItemsWhenDeserializing()
{
var deserializeMe = "[\r\n\t{\r\n\t\t\"someData\": 1,\r\n\t\t\"moreData\": \"I'm data!\r\nokok\r\n\"\r\n\t\t},\r\n\t{\r\n\t\t\"someData\": 2,\r\n\t\t\"moreData\": \"I'm also some data!\"\r\n\t\t}\r\n]\r\n";
var rows = ServiceStack.Text.JsonSerializer.DeserializeFromString<DeserializeTestData[]>(deserializeMe);
foreach (var row in rows)
{
Assert.That(row, Is.Not.EqualTo(null));
}
}
结果:
Test Name: ShouldNotContainNullItemsWhenDeserializing
Test Outcome: Failed
Test Duration: 0:00:00.125
Result Message:
Expected: not null
But was: null
操纵\\ r \\ n等的输入值变得很容易。 另外,同样,JsConfig不涉及在反序列化时忽略空值的设置。
最好的选择是忽略反序列化后的值中的空行。
var nonNullRows = rows.Where(r => r != null).ToList();
不是最优雅的,而是有条件的,应该做的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.