Xamarin Android - Linker і ServiceStack.Text

У мяне паўсталі праблемы пры атрыманні прыкладання для працы з поўнай спасылкай. Гэта мая ўстаноўка (мае імёны зборак змененыя):

  • Mono для Android 4.4.54
  • Android дадатак ( MyApp )
  • Платформа агностыку бібліятэка ( MyLib )

Я спрабую deserialise тыпу (Person) з тэксту JSON з дапамогай ServiceStack.Text. Ён выдатна працуе, калі толькі звязваючы SDK зборкі.

Замест таго, каб змясціць линкер ўключаюць атрыбуты ў MyLib , я выкарыстоўваю LinkDescription файл xml ў MyApp . Гэта выглядае наступным чынам:

<?xml version="1.0" encoding="utf-8" ?>
<linker>
  
    
      
    
  

Гэта мой выхад LogCat:

E/MyApp(14494): InitialiseUser(): System.TypeInitializationException: An exception was thrown by the type initializer for ServiceStack.Text.Json.JsonReader`1 ---> System.ArgumentNullException: Argument cannot be null.
E/MyApp(14494): Parameter name: method
E/MyApp(14494):   at System.Delegate.CreateDelegate (System.Type type, System.Object firstArgument, System.Reflection.MethodInfo method, Boolean throwOnBindFailure, Boolean allowClosed) [0x00000] in :0 
E/MyApp(14494):   at System.Delegate.CreateDelegate (System.Type type, System.Reflection.MethodInfo method, Boolean throwOnBindFailure) [0x00000] in :0 
E/MyApp(14494):   at ServiceStack.Text.PlatformExtensions.MakeDelegate (System.Reflection.MethodInfo mi, System.Type delegateType, Boolean throwOnBindFailure) [0x00000] in :0 
E/MyApp(14494):   at ServiceStack.Text.Json.JsonReader.GetParseFn (System.Type type) [0x00000] in :0 
E/MyApp(14494):   at ServiceStack.Text.Json.JsonTypeSerializer.GetParseFn (System.Type type) [0x00000] in :0 
E/MyApp(14494):   at ServiceStack.Text.Common.TypeAccessor.Create (ITypeSerializer serializer, ServiceStack.Text.TypeConfig typeConfig, System.Reflection.PropertyInfo propertyInfo) [0x00000] in :0 
E/MyApp(14494):   at ServiceStack.Text.Common.DeserializeTypeRef.GetTypeAccessorMap (ServiceStack.Text.TypeConfig typeConfig, ITypeSerializer serializer) [0x00000] in :0 
E/MyApp(14494):   at ServiceStack.Text.Common.DeserializeType`1[ServiceStack.Text.Json.JsonTypeSerializer].GetParseMethod (ServiceStack.Text.TypeConfig typeConfig) [0x00000] in :0 
E/MyApp(14494):   at ServiceStack.Text.Common.JsReader`1[ServiceStack.Text.Json.JsonTypeSerializer].GetCoreParseFn[Person]() [0x00000] in :0 
E/MyApp(14494):   at ServiceStack.Text.Common.JsReader`1[ServiceStack.Text.Json.JsonTypeSerializer].GetParseFn[Person]() [0x00000] in :0 
E/MyApp(14494):   at ServiceStack.Text.Json.JsonReader`1[MyLib.Person]..cctor() [0x00000] in :0 
E/MyApp(14494):   --- End of inner exception stack trace ---
E/MyApp(14494):   at ServiceStack.Text.JsonSerializer.DeserializeFromString[Person] (System.String value) [0x00000] in :0 
E/MyApp(14494):   at MyLib.Person.FromJson (System.String json, Boolean throwOnNullOrEmpty) [0x00000] in :0 
E/MyApp(14494):   at MyApp.MainActivity.InitialiseUser() [0x00000] in :0 

Пасля гэтага, мой асобнік асобы з'яўляецца несапраўдным.

Здаецца, з высновы, што канструктар па змаўчанні Чалавек не можа быць знойдзены (ён не мае яўна вызначаны канструктар).

Любая дапамога вельмі шануецца.

1
На самай справе, гледзячы на ​​код ServiceStack.Text, здаецца, линкер можа сапсаваць гэтую зборку, а не мае.
дададзена аўтар manadart, крыніца
На самай справе, гледзячы на ​​код ServiceStack.Text, здаецца, линкер можа сапсаваць гэтую зборку, а не мае.
дададзена аўтар manadart, крыніца
На самай справе, гледзячы на ​​код ServiceStack.Text, здаецца, линкер можа сапсаваць гэтую зборку, а не мае.
дададзена аўтар manadart, крыніца

7 адказы

Indeed it was ServiceStack.Text itself being messed up by the linker. JsonReader.GetParseFn() is accessed by reflection, evidently causing its omission.

Я скончыла з Linker Апісанне xml і я дадаў клас, які выглядае наступным чынам:

using ServiceStack.Text.Common;
using ServiceStack.Text.Json;

namespace MyApp
{
    public class LinkerInclude
    {
        public ParseStringDelegate IncludeJsonReader()
        {
            return JsonReader.GetParseFn();
        }
    }
}
1
дададзена
Гэта дакладна, чаму я вярнуўся назад у файл апісання сувязі, як паказана ў адзначаным адказ.
дададзена аўтар manadart, крыніца
Атрыманне «ServiceStack.Text.Json.JsonReader " недаступны з-за яго ўзроўню абароны », у бягучай версіі 4.0.8, любыя абнаўлення па выкарыстанні гэтага метаду звязвання?
дададзена аўтар Daniel Halan, крыніца

Indeed it was ServiceStack.Text itself being messed up by the linker. JsonReader.GetParseFn() is accessed by reflection, evidently causing its omission.

Я скончыла з Linker Апісанне xml і я дадаў клас, які выглядае наступным чынам:

using ServiceStack.Text.Common;
using ServiceStack.Text.Json;

namespace MyApp
{
    public class LinkerInclude
    {
        public ParseStringDelegate IncludeJsonReader()
        {
            return JsonReader.GetParseFn();
        }
    }
}
1
дададзена
Гэта дакладна, чаму я вярнуўся назад у файл апісання сувязі, як паказана ў адзначаным адказ.
дададзена аўтар manadart, крыніца
Атрыманне «ServiceStack.Text.Json.JsonReader " недаступны з-за яго ўзроўню абароны », у бягучай версіі 4.0.8, любыя абнаўлення па выкарыстанні гэтага метаду звязвання?
дададзена аўтар Daniel Halan, крыніца

Indeed it was ServiceStack.Text itself being messed up by the linker. JsonReader.GetParseFn() is accessed by reflection, evidently causing its omission.

Я скончыла з Linker Апісанне xml і я дадаў клас, які выглядае наступным чынам:

using ServiceStack.Text.Common;
using ServiceStack.Text.Json;

namespace MyApp
{
    public class LinkerInclude
    {
        public ParseStringDelegate IncludeJsonReader()
        {
            return JsonReader.GetParseFn();
        }
    }
}
1
дададзена
Гэта дакладна, чаму я вярнуўся назад у файл апісання сувязі, як паказана ў адзначаным адказ.
дададзена аўтар manadart, крыніца
Атрыманне «ServiceStack.Text.Json.JsonReader " недаступны з-за яго ўзроўню абароны », у бягучай версіі 4.0.8, любыя абнаўлення па выкарыстанні гэтага метаду звязвання?
дададзена аўтар Daniel Halan, крыніца

Indeed it was ServiceStack.Text itself being messed up by the linker. JsonReader.GetParseFn() is accessed by reflection, evidently causing its omission.

Я скончыла з Linker Апісанне xml і я дадаў клас, які выглядае наступным чынам:

using ServiceStack.Text.Common;
using ServiceStack.Text.Json;

namespace MyApp
{
    public class LinkerInclude
    {
        public ParseStringDelegate IncludeJsonReader()
        {
            return JsonReader.GetParseFn();
        }
    }
}
1
дададзена
Гэта дакладна, чаму я вярнуўся назад у файл апісання сувязі, як паказана ў адзначаным адказ.
дададзена аўтар manadart, крыніца
Атрыманне «ServiceStack.Text.Json.JsonReader " недаступны з-за яго ўзроўню абароны », у бягучай версіі 4.0.8, любыя абнаўлення па выкарыстанні гэтага метаду звязвання?
дададзена аўтар Daniel Halan, крыніца

У рэшце рэшт, я сапраўды знайшоў больш пытанняў, якія я не мог вырашыць з дапамогай метаду кода ў маім папярэднім адказе. Гэта таму, што некаторыя з класаў, якія кампаноўнік апушчаных былі ўнутранымі для зборкі ServiceStack.Text.

У рэшце рэшт я вярнуўся назад з дапамогай Link Апісанне XML. Выглядала гэта так:

<?xml version="1.0" encoding="utf-8" ?>
<linker>
  
    
      
    
    
      
    
    
      
      
    
  

Я пісаў пра тое, як дасягнуць гэтай тут </а>.

1
дададзена

У рэшце рэшт, я сапраўды знайшоў больш пытанняў, якія я не мог вырашыць з дапамогай метаду кода ў маім папярэднім адказе. Гэта таму, што некаторыя з класаў, якія кампаноўнік апушчаных былі ўнутранымі для зборкі ServiceStack.Text.

У рэшце рэшт я вярнуўся назад з дапамогай Link Апісанне XML. Выглядала гэта так:

<?xml version="1.0" encoding="utf-8" ?>
<linker>
  
    
      
    
    
      
    
    
      
      
    
  

Я пісаў пра тое, як дасягнуць гэтай тут </а>.

1
дададзена

У рэшце рэшт, я сапраўды знайшоў больш пытанняў, якія я не мог вырашыць з дапамогай метаду кода ў маім папярэднім адказе. Гэта таму, што некаторыя з класаў, якія кампаноўнік апушчаных былі ўнутранымі для зборкі ServiceStack.Text.

У рэшце рэшт я вярнуўся назад з дапамогай Link Апісанне XML. Выглядала гэта так:

<?xml version="1.0" encoding="utf-8" ?>
<linker>
  
    
      
    
    
      
    
    
      
      
    
  

Я пісаў пра тое, як дасягнуць гэтай тут </а>.

1
дададзена