加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在Json.NET Silverlight中使用TypeNameHandling.Objects进行

发布时间:2020-12-16 19:47:43 所属栏目:百科 来源:网络整理
导读:尝试在Silverlight中反序列化时出现异常. Test1失败,而Test2成功.我也尝试将TypeNameAssemblyFormat同时用于Simple和Full,但得到相同的结果. Test2可以解决程序集,为什么不能Json.NET? 更新:忘记提及我尝试反序列化的类型是在与反序列化发生的silverlight
尝试在Silverlight中反序列化时出现异常. Test1失败,而Test2成功.我也尝试将TypeNameAssemblyFormat同时用于Simple和Full,但得到相同的结果. Test2可以解决程序集,为什么不能Json.NET?

更新:忘记提及我尝试反序列化的类型是在与反序列化发生的silverlight程序集不同的程序集中定义的.

这两个测试都在非Silverlight .NET应用程序中运行.

如何反序列化具有类型名称的json字符串?

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;
        }
    }
}

这个Test2成功了:

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,PublicKeyToken=null"

    string fullName = "AmberGIS.NetworkTrace.DTO.NTPoint,PublicKeyToken=null";
    var t = Type.GetType(fullName);
    var pnt2 = Activator.CreateInstance(t) as NTPoint;

}
尝试将设置添加到JsonConvert.DeserializeObject< T>(json,设置),
其中设置为:
new JsonSerializerSettings
                {
                    TypeNameHandling = TypeNameHandling.Objects,TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Full
                }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读