2015-02-19 2 views
2

Я пытаюсь десериализации простой строки JSON с помощью ServiceStack для объекта DTO:десериализация строка с помощью ServiceStack

public class TestDto 
{ 
    public int MyProp { get; set; } 
} 

var json = JsonSerializer.DeserializeFromString<TestDto>("{\"MyProp\":6}"); 

я получаю исключение:

[System.TypeInitializationException] = 
{"The type initializer for 'ServiceStack.Text.Json.JsonReader`1' threw an exception."} 

// With the inner exception: 
"Object reference not set to an instance of an object." 

// And the stack trace: 
at ServiceStack.Text.Common.JsReader`1.GetCoreParseFn[T]() 
at ServiceStack.Text.Common.JsReader`1.GetParseFn[T]() 
at ServiceStack.Text.Json.JsonReader`1..cctor() 

Я занимаюсь разработкой в ​​Visual Studio с помощью Xamarin на Windows 8.1. Код ServiceStack находится внутри переносимой библиотеки. В настоящий момент я запускаю переносимый библиотечный код непосредственно из модульного теста.

Вот информация NuGet пакет для ServiceStack:

<package id="ServiceStack.Text" version="4.0.36" 
targetFramework="portable-net45+win+MonoAndroid10+xamarinios10+MonoTouch10" /> 

Любая идея, что я здесь отсутствует?

+0

Какую версию SS.Text вы используете? На какой платформе/ОС вы работаете? и, пожалуйста, предоставьте любую другую конфигурацию, которую вы используете, если таковая имеется. – mythz

+0

Привет @mythz Я добавил дополнительную информацию в нижней части вопроса. – doorman

+0

от Xamarin Вы имеете в виду разработку для Android или iOS? – mythz

ответ

3

Документов для использования PCL clients and Json Serializer is in the HelloMobile project, в частности, необходимы установить ServiceStack.Client NuGet пакет , который содержит специфичное для платформы расширения, необходимое для поддержки платформы вы работаете на:

PM> Install-Package ServiceStack.Client 

Для прошивки вы должны также explicitly initialize the PCL library с:

IosPclExportClient.Configure(); 
+0

Спасибо за ваш ответ. В основном у меня уже есть служба Rest, и я просто хочу заменить библиотеку newtonsoft на моей клиентской стороне библиотекой ServiceStack, потому что она должна быть быстрее. В настоящее время я использую newtonsoft JsonConvert.DeserializeObject (@ "{" "MyProp" ": 6}"); и он отлично работает. Но я думал, что могу просто заменить эту DLL на dll ServiceStack. – doorman

+0

@doorman Право, версия PCL Serializers ServiceStack.Text.dll требует пакет NuGet 'ServiceStack.Client', вам не нужно использовать какие-либо из клиентских библиотек, но сериализатор должен вызывать в расширения платформы чтобы иметь возможность использовать наиболее оптимальный вариант генерации кода для каждой доступной платформы. – mythz

+0

mythz работает, чтобы вызвать библиотеку при запуске в симуляторе. Однако он не работает в модульном тесте, потому что проект ios не вызывается. Вы знаете, можно ли тестировать переносимую библиотеку, которая использует библиотеку ServiceStack? – doorman

Смежные вопросы