【问题标题】:Best way to serialize a complex JSON string?序列化复杂 JSON 字符串的最佳方法?
【发布时间】:2014-03-27 22:06:10
【问题描述】:

我在处理一个 JSON 字符串。它包含有关 LED 及其颜色的信息。在结构化类对象中序列化此字符串的最快方法是什么?

{ “层1”:{ “剩下”: { “0”:{ “r”:11, “克”:10, “乙”:10 }, “1”:{ “r”:13, “克”:13, “乙”:12 }, “2”:{ “r”:28, “克”:25, “乙”:21 } }, “最佳”: { “0”:{ “r”:33, “克”:30, “乙”:26 }, “1”:{ “r”:42, “克”:37, “乙”:32 }, “2”:{ “r”:34, “克”:30, “乙”:26 }, “3”:{ “r”:14, “克”:13, “乙”:12 } } } }

首选的结果是带有列表的 SideClass(左侧或顶部等)......并且每个 Led 都有一个 R、G 和 B 整数。

希望有人能帮帮我!

亲切的问候, 尼尔斯

【问题讨论】:

  • 你的意思是反序列化吗?你试过什么?您发布的只是 Json。
  • 有没有机会稍微改变一下 JSON 的格式(使用数组而不是数字作为键)?如果是这样,那么使用数据合约解析它会容易得多,但目前这种格式在没有像 JSON.NET 这样的第三方库的情况下会变得很棘手。

标签: c# json windows-phone-8 windows-phone


【解决方案1】:

首先创建以下数据类:

[DataContract]
public class MyObject
{
    [DataMember]
    public Layer layer1 { get; set; }
}
[DataContract]
public class Layer
{
    [DataMember]
    public Side left { get; set; }
    [DataMember]
    public Side top { get; set; }
}

[DataContract]
public class Side
{
    [DataMember(Name="0")]
    public Color _0 { get; set; }
    [DataMember(Name = "1")]
    public Color _1 { get; set; }
    [DataMember(Name = "2")]
    public Color _2 { get; set; }
    [DataMember(Name = "3")]
    public Color _3 { get; set; }
}
[DataContract]
public class Color
{
    [DataMember]
    public byte r { get; set; }
    [DataMember]
    public byte g { get; set; }
    [DataMember]
    public byte b { get; set; }
}

接下来使用DataContractJsonSerializer对json进行反序列化:

DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(MyObject));
var instance = s.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(json)));

请注意,如果您有更多的面或层,JSON 不会让这变得容易。由于 JSON 不使用数组而是对象,因此无法将它们作为列表返回或支持任意数量的条目。

【讨论】:

  • 酷,可行:)。现在,侧面 LED 已在您的答案中硬编码。使这种动态化的最佳方法是什么(例如,您可以拥有 3 个或 50 个 LED)。所以我想 List 会是完美的。
猜你喜欢
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
相关资源
最近更新 更多