2016-09-01 4 views
0

Предположим, у нас есть класс Request, который мы хотим сериализовать для json и deserialize от json.Как создать класс для абстрактного документа json?

class Request { 
    public string SessionId { get; set; } 
    ... 
    public string InnerJson { get; set; } 
} 

Как он должен JSON выглядит

{ 
    "SessionId": 1, 
    ... 
    "InnerJson": { 
    "some": "json object", 
    "whatever": 666 
    } 
} 

InnerJson некоторые JSON документ (произвольный тип).

Полезно ли использовать string для InnerJson в Request?

Есть ли хороший способ дизайна Request класс?

+0

Да, вы можете использовать строку для 'InnerJson' и использовать' Dynamic' для десериализации этой строки для объекта. –

+0

Что такое InnerJson? Имеет ли он такую ​​же структуру для ваших запросов или может содержать любые данные и изменения между запросами? –

+0

Как вы получаете внутренний json? Где вы получаете этого json и кто получает этот json? –

ответ

0

Если вы собираетесь использовать строго типизированную модель, я бы предложил завод. Для демонстрации ради:

public abstract class AbstractOptions { } 

public class Options1 : AbstractOptions { public int Whatever { get; set; } } 

public class Options2 : AbstractOptions { public string Some { get; set; } } 

public class Options3 : AbstractOptions { 
    [JsonProperty("when")] public DateTime When { get; set; } 
    [JsonProperty("inner")] public InnerComplexObject Inner { get; set; } 
} 

public class Request { 
    [JsonProperty("session-id")] public string SessionId { get; set; } 
    [JsonProperty("options")] public AbstractOptions Options { get; set; } 
} 

public class InnerComplexObject { } 

затем использовать его как:

var req1 = new Request() { SessionId = "s1", Options = new Options1 { Whatever = 123 } }; 
var req2 = new Request() { SessionId = "s2", Options = new Options2 { Some = "some" } }; 
var req3 = new JToken.Request() { SessionId = "s3", Options = new Options3 { When = DateTime.UtcNow, Inner = new InnerComplexObject() } }; 

В противном случае, гибкость, держать InnerJson в string и use dynamic queries.

Смежные вопросы