序列化复杂JSON字符串的最佳方法是什么?

时间:2014-03-27 22:06:10

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

我正在努力使用JSON字符串..它包含有关LED及其颜色的信息。在结构化类对象中序列化此字符串的最快方法是什么?

  

{       " layer1":{           "离开":{               " 0":{                   " r":11,                   " g":10,                   " b":10               },               " 1":{                   " r":13,                   " g":13,                   " b":12               },               " 2":{                   " r":28,                   " g":25,                   " b":21               }           },           " top":{               " 0":{                   " r":33,                   " g":30,                   " b":26               },               " 1":{                   " r":42,                   " g":37,                   " b":32               },               " 2":{                   " r":34,                   " g":30,                   " b":26               },               " 3":{                   " r":14,                   " g":13,                   " b":12               }   }   }   }

首选结果是带有List的SideClass(左侧或顶部等)以及每个Led的R,G和B int。

我希望有人可以帮助我!

亲切的问候, 尼尔斯

1 个答案:

答案 0 :(得分: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不使用数组而是对象,所以不可能将它们作为列表返回或支持任意数量的条目。