2014-03-27 101 views
0

我在使用JSON字符串掙扎。它包含有關LED及其顏色的信息。在結構化類對象中序列化此字符串的最快方法是什麼?序列化複雜的JSON字符串的最佳方法?

{ 「層1」:{ 「左」:{ 「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 a R,G和B int。

我希望有人能幫助我!

親切的問候, 尼爾斯

+1

你的意思是反序列化?你有什麼嘗試?你發佈的只是Json。 – WiredPrairie

+0

有沒有任何機會可以稍微改變JSON的格式(使用數組而不是數字作爲鍵)?如果是這樣,它會使它更容易解析這個使用datacontract,但目前這種格式變得棘手,沒有像JSON.NET第三方庫。 – dotMorten

回答

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不使用數組而是使用對象,所以不可能將它們作爲列表返回或支持任意數量的條目。

+0

很酷,這工作:)。現在,側面LED在您的答案中被硬編碼。實現這種動態效果的最佳方式是什麼(例如,您可以有3個或50個LED)。所以我想一個列表將是完美的。 – Niels

相關問題