[英]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.