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 № 1Jednym 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.