Silverlight'ta seri hale getirmeye çalışırken bir istisna alıyorum. Test2 başarısız olur, Test2 başarılı olur. Ayrıca hem Basit hem de Tam olarak TypeNameAssemblyFormat denedim, ancak aynı sonuçları alın. Test2 montajı çözebilir, neden Json.NET olamaz?Json.NET Silverlight'ta TypeNameHandling.Objects ile nasıl deserialize olabilirim?
Güncelleme: Deserialize denemek istediğim türden bahsetmeyi unuttum, deserializasyonun oluştuğu silverlight derlemesinden farklı bir montajda tanımlanır.
Her iki test de non-silverlight .NET uygulamasında çalışır.
Tipenleri olan bir json dizgisini nasıl deserialize edebilirim?
private void Test1()
{
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.TypeNameHandling = TypeNameHandling.Objects;
string json1 = "{\"$type\":\"AmberGIS.NetworkTrace.DTO.NTPoint, NetworkTrace.DTO.Assembly\",\"X\":0.0,\"Y\":0.0,\"SpatialReference\":null}";
try
{
var n1 = JsonConvert.DeserializeObject<NTPoint>(json1, settings);
//Error resolving type specified in JSON 'AmberGIS.NetworkTrace.DTO.NTPoint, NetworkTrace.DTO.Assembly'.
//Could not load file or assembly 'NetworkTrace.DTO.Assembly, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
//The requested assembly version conflicts with what is already bound in the app domain or specified in the manifest.
//(Exception from HRESULT: 0x80131053)
}
catch (Exception ex)
{
while (ex != null)
{
Debug.WriteLine(ex.Message);
ex = ex.InnerException;
}
}
}
Bu Test2 başarılı:
private void Test2()
{
var pnt1 = new AmberGIS.NetworkTrace.DTO.NTPoint();
Debug.WriteLine(pnt1.GetType().AssemblyQualifiedName);
// "AmberGIS.NetworkTrace.DTO.NTPoint, NetworkTrace.DTO.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
string fullName = "AmberGIS.NetworkTrace.DTO.NTPoint, NetworkTrace.DTO.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
var t = Type.GetType(fullName);
var pnt2 = Activator.CreateInstance(t) as NTPoint;
}
kullanarak: montaj bilgisi bütün (iç içe) nesneler üzerinde yineleme ve ekleyerek JSON değiştirmek böylece olacak cevapsız listede görünmüyor mu? – keyr
@keyr, ancak daha az hacky çözümü için umuyordum. –