【问题标题】:Deserializing JSON in Windows Phone 7 with Json.NET使用 Json.NET 在 Windows Phone 7 中反序列化 JSON
【发布时间】:2011-03-09 03:43:30
【问题描述】:

我知道有无数关于此的问题。我读过很多,但了解甚少。你能帮忙澄清一下WP7中反序列化JSON的过程吗?

我的 JSON 看起来像这样:

{ 
    "status" : {
        "code" : 99 ,
        "message" : "Already checked in" 
    },

    "response" : {
        "token" : "faisdufhdaisuflasdkf",
        "distance" : 20,
        "angle" : 45
    }   
}

我正在尝试使用 Json.NET,但这是我的理解几乎一无所获的地方。

 var deserializedJSON = JsonConvert.DeserializeObject<Dictionary<string, <TYPE> >>(JsonString);

对于&lt;TYPE&gt;,我怎样才能最好地定义我预期的反序列化对象?状态和响应作为单独的类?还是只是一个通用的全封装 ServerResponse 类?

另外,我怎么知道这个序列化程序会将正确的输出分配给正确的类成员变量?如果我有

class Status {
    string code;
    string message;
}

我怎么知道这些会被正确分配?

谢谢。如果这看起来微不足道,请道歉。这是我在 C#、Silverlight、Windows Phone 7 和/或 .NET 中的第一个项目

【问题讨论】:

    标签: c# silverlight json windows-phone-7 json.net


    【解决方案1】:
    { 
        "status" : {
            "code" : 99 ,
            "message" : "Already checked in" 
        },
    
        "response" : {
            "token" : "faisdufhdaisuflasdkf",
            "distance" : 20,
            "angle" : 45
        }   
    }
    

    翻译成

    public class item {
        public status status { get; set; }
        public response response { get; set; }
    }
    public class status {
        public int code { get; set; }
        public string message { get; set; }
    }
    public class response {
        public string token { get; set; }
        public int distance { get; set; }
        public int angle { get; set; }
    }
    

    但在这种情况下,项目是匿名的(仍然有效)

    然后像这样使用它:

    var deserializedJSON = JsonConvert.DeserializeObject<item>(JsonString);
    

    【讨论】:

    • 那么调用这个函数会自动将每个类和成员与适当的键值对关联起来?
    • @brian 调用此函数将正确地将 json 对象反序列化为 c# 对象,是的。你说的另一件事是不正确的。我没有在这里保留键值对。如果您需要返回 KVP 列表,那么您可能需要其他内容。
    • 我不需要返回 KVP,我只是指的是 JSON 字符串中的特定 KVP。请原谅我的新手术语 :) 非常感谢。
    【解决方案2】:

    您有一个围绕状态和响应的包装器,因此如果您想采取简单的方法,则需要以某种方式表示的包装器类。如果您不想自动反序列化,您可以控制并避免使用包装器,但我不明白为什么这对于您正在尝试做的事情来说是一个更好的选择。换句话说,我正在确认 drachenstern 的回答,我也对此进行了投票。 :-)

    【讨论】:

    • 感谢您的支持。 :D ~ 顺便说一句,你如何命名那个匿名包装器?我很确定任何名称都可以,但我倾向于将我的名称作为复杂对象发送回来,所以这对我来说似乎有点可疑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多