/ / Wiele modeli do json-json, windows-runtime, json.net, windows-8.1

Wiele modeli do json - json, windows-runtime, json.net, windows-8.1

Czy istnieje sposób na utworzenie ciągu tablic json z wielu modeli dla aplikacji Windows 8.1 Store. Na przykład:

public class Foo
{
public string property1 {get;set;}
public string property2 {get;set;}
}

public class Foo2
{
public string value1 {get;set;}
public string value2 {get;set;}
}

Mam wiele modeli. Używam json.net do konwersji modeli na ciąg json. Mogę także konwertować tablice modeli. Moje pytanie brzmi: jak mogę utworzyć tablicę ciągu json przy użyciu takich modeli jak:

[
{
"property1":"string",
"property2":"string"
},
{
"value1":"string",
"value2":"string"
},
{
"property1":"string",
"property2":"string"
}
]

Naprawdę utknąłem i potrzebuję twojej pomocy.

Odpowiedzi:

1 dla odpowiedzi № 1

Jednym ze sposobów jest utworzenie klasy abstrakcyjnej BaseFoo że oba Foo i Foo2 klasy odziedziczą po:

public abstract class BaseFoo
{

}

public class Foo : BaseFoo
{
public string property1 { get; set; }
public string property2 { get; set; }
}

public class Foo2 : BaseFoo
{
public string value1 { get; set; }
public string value2 { get; set; }
}

Powiedzmy, że inicjujesz listę w następujący sposób:

 var list = new List<BaseFoo>
{
new Foo
{
property1 = "prop11",
property2 = "prop12"
},
new Foo2
{
value1 = "val1",
value2 = "val2"
},
new Foo
{
property1 = "prop21",
property2 = "prop22"
}
};

Serializacja powinna wyglądać następująco:

var settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects
};

var json = JsonConvert.SerializeObject(list, Formatting.Indented, settings);

I wyprodukowany json będzie wyglądać tak:

[
{
"$type": "ConsoleApplication23.Foo, ConsoleApplication23",
"property1": "prop11",
"property2": "prop12"
},
{
"$type": "ConsoleApplication23.Foo2, ConsoleApplication23",
"value1": "val1",
"value2": "val2"
},
{
"$type": "ConsoleApplication23.Foo, ConsoleApplication23",
"property1": "prop21",
"property2": "prop22"
}
]

The TypeNameHandling.Objects opcja została dodana dla pomyślnej deserializacji:

var deserializedList = JsonConvert.DeserializeObject<List<BaseFoo>>(json, settings);

Możesz go wykluczyć i uzyskać dokładny ciąg jsonpotrzebujesz, jeśli nie musisz go cofać. Chociaż dołączenie go nie powinno przerwać żadnej funkcji, ale zwiększy rozmiar ciągu json.