Unity'de Json ve Json Dizisini Seri Hale Getirme ve Seri Durumdan Çıkarma


103

Bir PHP dosyasından kullanarak unity'ye gönderilen öğelerin bir listesi var WWW.

WWW.textBakışlar ister:

[
    {
        "playerId": "1",
        "playerLoc": "Powai"
    },
    {
        "playerId": "2",
        "playerLoc": "Andheri"
    },
    {
        "playerId": "3",
        "playerLoc": "Churchgate"
    }
]

Nerede ekstra Döşeme []dan string. Kullanarak ayrıştırmaya çalıştığımda Boomlagoon.JSON, sadece ilk nesne alınıyor. Mecbur öğrendim deserialize()listesi ve MiniJSON ithal var.

Ama deserialize()bu listeyi nasıl yapacağım kafam karıştı . Her JSON nesnesinde döngü yapmak ve verileri almak istiyorum. Bunu Unity'de C # kullanarak nasıl yapabilirim?

Kullandığım sınıf

public class player
{
    public string playerId { get; set; }
    public string playerLoc { get; set; }
    public string playerNick { get; set; }
}

Kırparak sonra []ben MiniJSON kullanarak json ayrıştırmak mümkün. Ama sadece ilkini geri veriyor KeyValuePair.

IDictionary<string, object> players = Json.Deserialize(serviceData) as IDictionary<string, object>;

foreach (KeyValuePair<string, object> kvp in players)
{
    Debug.Log(string.Format("Key = {0}, Value = {1}", kvp.Key, kvp.Value));
}

Teşekkürler!


Neden dışını çıkardınız [ve ]? Liste yapan da budur. Sadece onu kaldırmayı bırakın ve bir dizi veya liste olarak serisini kaldırın ve iyi olmasını beklerim. Lütfen denediğiniz kodu gönderin.
Jon Skeet

Seri durumdan çıkarma için kullanılan sınıfı bize gösterin. Biçim tuhaf, neden ikinci playerId küme parantezlerinin arasına alınmamış? Bu şey gibi listesine serisini gerektiğini List<PlayerLocation>bunun nedeni, olan bir dizidir.
Maximilian Gerhardt

@MaximilianGerhardt Kıvırcık ayraçlar bir yazım hatası olduğundan üzgünüm. Soruda düzeltildi ve kodu da ekledi. Teşekkürler.
dil33pm

1
Sanırım, bu kütüphanenin seri dışı bırakmayı nasıl ele aldığına dair anlayışınızda bir sorun var . Bu, olağan seriyi kaldırma (belki de gördüğünüz gibi Newtonsoft.Json) değildir, ancak Json.Deserialize()HER ZAMAN IDictionary<string,object>size bir yanıt verir ve siz devam edersiniz List<object>. Stackoverflow.com/a/22745634/5296568 sayfasına bakın . Tercihen, alıştığınız seriyi kaldırma işlemini gerçekleştiren daha iyi bir JSON serisini kaldırıcı edinin.
Maximilian Gerhardt

@MaximilianGerhardt ile denedim IDictionary<string,object>. Değeri çıkarabiliyorum, ancak yalnızca ilkini KeyValuePair<>.
dil33pm

Yanıtlar:


256

Unity eklendi JsonUtility'yi 5.3.3 Güncellemesinden sonra API'sine . Daha karmaşık bir şey yapmadığınız sürece tüm 3. taraf kitaplıklarını unutun. JsonUtility, diğer Json kitaplıklarından daha hızlıdır. Unity 5.3.3 sürümüne veya üstüne güncelleyin ve ardından aşağıdaki çözümü deneyin.

JsonUtilityhafif bir API'dir. Yalnızca basit türler desteklenir. O mu değil böyle Sözlük olarak koleksiyonları destekler. Bunun bir istisnası List. Destekler Listve Listdizi!

DictionaryBasit veri türlerini seri hale getirmeniz veya seri durumdan çıkarmanız dışında bir şey yapmanız gerekirse , üçüncü taraf bir API kullanın. Aksi takdirde okumaya devam edin.

Serileştirilecek örnek sınıf:

[Serializable]
public class Player
{
    public string playerId;
    public string playerLoc;
    public string playerNick;
}

1. BİR VERİ NESNESİ (ARRAY OLMAYAN JSON)

Bölüm A Serileştirme :

public static string ToJson(object obj);Yöntemle Json'a seri hale getirin .

Player playerInstance = new Player();
playerInstance.playerId = "8484239823";
playerInstance.playerLoc = "Powai";
playerInstance.playerNick = "Random Nick";

//Convert to JSON
string playerToJson = JsonUtility.ToJson(playerInstance);
Debug.Log(playerToJson);

Çıktı :

{"playerId":"8484239823","playerLoc":"Powai","playerNick":"Random Nick"}

Bölüm B Diziselleştirme :

public static string ToJson(object obj, bool prettyPrint);Yöntem aşırı yüklemesiyle Json'a seri hale getirin . Basitçe geçen trueetmek JsonUtility.ToJsonfonksiyonu verileri biçimlendirir. Aşağıdaki çıktıyı yukarıdaki çıktıyla karşılaştırın.

Player playerInstance = new Player();
playerInstance.playerId = "8484239823";
playerInstance.playerLoc = "Powai";
playerInstance.playerNick = "Random Nick";

//Convert to JSON
string playerToJson = JsonUtility.ToJson(playerInstance, true);
Debug.Log(playerToJson);

Çıktı :

{
    "playerId": "8484239823",
    "playerLoc": "Powai",
    "playerNick": "Random Nick"
}

Seri Durumdan Çıkarma A Bölümü :

public static T FromJson(string json);Aşırı yöntem yüklemesiyle json serisini kaldırın .

string jsonString = "{\"playerId\":\"8484239823\",\"playerLoc\":\"Powai\",\"playerNick\":\"Random Nick\"}";
Player player = JsonUtility.FromJson<Player>(jsonString);
Debug.Log(player.playerLoc);

Seriyi Kaldırma B Bölümü :

public static object FromJson(string json, Type type);Aşırı yöntem yüklemesiyle json serisini kaldırın .

string jsonString = "{\"playerId\":\"8484239823\",\"playerLoc\":\"Powai\",\"playerNick\":\"Random Nick\"}";
Player player = (Player)JsonUtility.FromJson(jsonString, typeof(Player));
Debug.Log(player.playerLoc);

Seri Durumdan Çıkarma C Bölümü :

İle json serisini kaldırpublic static void FromJsonOverwrite(string json, object objectToOverwrite);Yöntemle . Ne zaman JsonUtility.FromJsonOverwritekullanılır, sen deserializing olduğunu Nesne yeni bir örneğinin oluşturulacak için. Geçtiğiniz örneği yeniden kullanır ve değerlerinin üzerine yazar.

Bu etkilidir ve mümkünse kullanılmalıdır.

Player playerInstance;
void Start()
{
    //Must create instance once
    playerInstance = new Player();
    deserialize();
}

void deserialize()
{
    string jsonString = "{\"playerId\":\"8484239823\",\"playerLoc\":\"Powai\",\"playerNick\":\"Random Nick\"}";

    //Overwrite the values in the existing class instance "playerInstance". Less memory Allocation
    JsonUtility.FromJsonOverwrite(jsonString, playerInstance);
    Debug.Log(playerInstance.playerLoc);
}

2. ÇOKLU VERİ (ARRAY JSON)

Json'unuz birden çok veri nesnesi içerir. Örneğin, playerIdbirden fazla kez ortaya çıktı . Unity JsonUtility, diziyi hala yeni olduğu için desteklemiyor, ancak dizi almak için bu kişiden bir yardımcı sınıf kullanabilirsiniz. çalışmakJsonUtility .

Adlı bir sınıf oluşturun JsonHelper. JsonHelper'ı doğrudan aşağıdan kopyalayın.

public static class JsonHelper
{
    public static T[] FromJson<T>(string json)
    {
        Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(json);
        return wrapper.Items;
    }

    public static string ToJson<T>(T[] array)
    {
        Wrapper<T> wrapper = new Wrapper<T>();
        wrapper.Items = array;
        return JsonUtility.ToJson(wrapper);
    }

    public static string ToJson<T>(T[] array, bool prettyPrint)
    {
        Wrapper<T> wrapper = new Wrapper<T>();
        wrapper.Items = array;
        return JsonUtility.ToJson(wrapper, prettyPrint);
    }

    [Serializable]
    private class Wrapper<T>
    {
        public T[] Items;
    }
}

Json Dizisini Seri Hale Getirme :

Player[] playerInstance = new Player[2];

playerInstance[0] = new Player();
playerInstance[0].playerId = "8484239823";
playerInstance[0].playerLoc = "Powai";
playerInstance[0].playerNick = "Random Nick";

playerInstance[1] = new Player();
playerInstance[1].playerId = "512343283";
playerInstance[1].playerLoc = "User2";
playerInstance[1].playerNick = "Rand Nick 2";

//Convert to JSON
string playerToJson = JsonHelper.ToJson(playerInstance, true);
Debug.Log(playerToJson);

Çıktı :

{
    "Items": [
        {
            "playerId": "8484239823",
            "playerLoc": "Powai",
            "playerNick": "Random Nick"
        },
        {
            "playerId": "512343283",
            "playerLoc": "User2",
            "playerNick": "Rand Nick 2"
        }
    ]
}

Json Array serisini kaldırma :

string jsonString = "{\r\n    \"Items\": [\r\n        {\r\n            \"playerId\": \"8484239823\",\r\n            \"playerLoc\": \"Powai\",\r\n            \"playerNick\": \"Random Nick\"\r\n        },\r\n        {\r\n            \"playerId\": \"512343283\",\r\n            \"playerLoc\": \"User2\",\r\n            \"playerNick\": \"Rand Nick 2\"\r\n        }\r\n    ]\r\n}";

Player[] player = JsonHelper.FromJson<Player>(jsonString);
Debug.Log(player[0].playerLoc);
Debug.Log(player[1].playerLoc);

Çıktı :

Powai

Kullanıcı2


Bu sunucudan bir Json dizisiyse ve onu elle oluşturmadıysanız :

{"Items":Alınan dizenin önüne Eklemeniz ve ardından eklemeniz gerekebilir} sonuna .

Bunun için basit bir işlev yaptım:

string fixJson(string value)
{
    value = "{\"Items\":" + value + "}";
    return value;
}

o zaman kullanabilirsiniz:

string jsonString = fixJson(yourJsonFromServer);
Player[] player = JsonHelper.FromJson<Player>(jsonString);

3. json dizesini sınıfsız ve& Json'u sayısal özelliklerle serileştirmeden kaldır

Bu, bir sayı veya sayısal özelliklerle başlayan bir Json'dur.

Örneğin:

{ 
"USD" : {"15m" : 1740.01, "last" : 1740.01, "buy" : 1740.01, "sell" : 1744.74, "symbol" : "$"}, 

"ISK" : {"15m" : 179479.11, "last" : 179479.11, "buy" : 179479.11, "sell" : 179967, "symbol" : "kr"},

"NZD" : {"15m" : 2522.84, "last" : 2522.84, "buy" : 2522.84, "sell" : 2529.69, "symbol" : "$"}
}

Birlik JsonUtility bunu desteklemez çünkü "15m" özelliği bir sayı ile başlar. Bir sınıf değişkeni bir tamsayı ile başlayamaz.

SimpleJSON.csUnity'nin wiki'sinden indirin .

USD'nin "15 milyon" mülkü almak için:

var N = JSON.Parse(yourJsonString);
string price = N["USD"]["15m"].Value;
Debug.Log(price);

ISK'nın "15m" özelliğini almak için:

var N = JSON.Parse(yourJsonString);
string price = N["ISK"]["15m"].Value;
Debug.Log(price);

NZD'nin "15 milyon" mülkü almak için:

var N = JSON.Parse(yourJsonString);
string price = N["NZD"]["15m"].Value;
Debug.Log(price);

Sayısal bir rakamla başlamayan geri kalan Json özellikleri, Unity'nin JsonUtility tarafından işlenebilir.


4. SORUN GİDERME SORUNU:

İle seri hale getirirken sorun JsonUtility.ToJsonmu yaşıyorsunuz ?

Boş dize mi alıyorsunuz yoksa " {}" ile JsonUtility.ToJsonmi?

Bir . Sınıfın bir dizi olmadığından emin olun. Eğer öyleyse, JsonHelper.ToJsonyerine yukarıdaki yardımcı sınıfı kullanın JsonUtility.ToJson.

B . [Serializable]Serileştirdiğiniz sınıfın en üstüne ekleyin .

C . Sınıftan özelliği kaldırın. Örneğin, değişkendeki public string playerId { get; set; } kaldırın { get; set; } . Unity bunu seri hale getiremez.

Seri durumdan çıkarılırken karşılaşılan sorunlar JsonUtility.FromJson?

Bir . Eğer alırsanız Null, Json'un bir Json dizisi olmadığından emin olun. Eğer öyleyse, JsonHelper.FromJsonyerine yukarıdaki yardımcı sınıfı kullanın JsonUtility.FromJson.

B . NullReferenceExceptionSeri durumdan çıkarılırken alırsanız [Serializable], sınıfın en üstüne ekleyin .

C. Diğer sorunlar, json'unuzun geçerli olduğunu doğrulayın. Bu siteye buradan gidin ve json'u yapıştırın. Json'un geçerli olup olmadığını size göstermelidir. Ayrıca Json ile uygun sınıfı oluşturmalıdır. Her değişkenden kaldırmayı kaldırdığınızdan { get; set; } ve ayrıca [Serializable]oluşturulan her sınıfın üstüne eklediğinizden emin olun .


Newtonsoft.Json:

Herhangi bir nedenle Newtonsoft.Json kullanılması gerekiyorsa, Unity'nin çatallı sürümünü buradan kontrol edin . Belirli bir özellik kullanılırsa çökme yaşayabileceğinizi unutmayın. Dikkatli ol.


Sorunuzu cevaplamak için :

Orijinal verileriniz

 [{"playerId":"1","playerLoc":"Powai"},{"playerId":"2","playerLoc":"Andheri"},{"playerId":"3","playerLoc":"Churchgate"}]

Ekle {"Items": içinde ön o zaman bir ekleme } de sonunda onu.

Bunu yapmak için kod:

serviceData = "{\"Items\":" + serviceData + "}";

Şimdi sahipsin:

 {"Items":[{"playerId":"1","playerLoc":"Powai"},{"playerId":"2","playerLoc":"Andheri"},{"playerId":"3","playerLoc":"Churchgate"}]}

To seri çoklu olarak php verileri diziler , artık yapabileceği

public player[] playerInstance;
playerInstance = JsonHelper.FromJson<player>(serviceData);

playerInstance[0] ilk veriniz

playerInstance[1] ikinci veriniz

playerInstance[2] üçüncü veriniz

veya sınıf içindeki veriler playerInstance[0].playerLoc, playerInstance[1].playerLoc, playerInstance[2].playerLoc......

playerInstance.LengthErişmeden önce uzunluğu kontrol etmek için kullanabilirsiniz .

NOT: Kaldır { get; set; } dan playersınıfında. Eğer varsa { get; set; }, işe yaramaz. Birlik en JsonUtilityetmez DEĞİL olarak tanımlanan sınıf üyeleri ile çalışmak özellikleri .


mysqlKullanarak PHP'den bir sorgu satır dizisi döndürüyorum json_encode($row). Dolayısıyla yanıt, formatta birden çok JSONObject içerir [{"playerId":"1","playerLoc":"Powai"},{"playerId":"2","playerLoc":"Andheri"},{"playerId":"3","playerLoc":"Churchgate"}]. JsonUtility'yi denedim, ancak nesnelerin serisini kaldırıp json nesnelerini tek tek alamadım. Bana yardım edebilirsen.
dil33pm

2
Yukarıda yazdığım koda bakın. Bunu yapmanın üç yolunu gösteriyor JsonUtility.FromJson. Kaldırtmak söylemeyi unuttum { get; set; }gelen playersınıfından. Varsa { get; set; }, işe yaramayacak. playerSınıfınızı yukarıda yayınladığımla karşılaştırın ve ne dediğimi anlayacaksınız.
Programcı

1
Sorun değil. Unity, dizi için destek eklediğinde (ki bu çok yakında) bunu düzenleyeceğim, böylece artık bu Helper sınıfına ihtiyacınız olmayacak.
Programcı

1
"Tüm 3. parti kütüphaneleri unut" diyecek kadar ileri gitmem. JsonUtility'nin sınırlamaları vardır. Üzerinde eylemler gerçekleştirebileceğiniz bir JSON nesnesi döndürmez. Örneğin, bir json dosyası alıyorum ve bir "başarı" anahtarı olup olmadığını kontrol etmek istiyorum. Yapamam. JsonUtility, tüketicinin json dosyasının tam içeriğini bilmesini gerektirir. Ayrıca, Sözlük dönüştürücü yok. Bu yüzden bazı iyi şeyler yapıyor ancak 3. parti kullanımı hala gerekli.
Everts

2
Kullanın JsonHelper. Bu iyi. Onunla Json oluşturursanız, fazladan adım atmadan onunla json da okuyabilirsiniz. Ekstra şeyler yapmanız gerekebilecek tek zaman, json dizisini sunucudan alıyorsanız ve çözüme dahil edilen cevabımdır. Bir başka yol JsonHelper, sınıfı başka bir sınıfa koymak ve sonra onu a yapmaktır List. Bu çoğu insan için çalışıyor. Eğer yük oyunu verileri kaydetmek ve bir yol arıyorsanız o zaman bakın bu . Tek satır kodla yükler ve kaydedersiniz.
Programcı

17

Bunun gibi bir JSON'nuz olduğunu varsayalım

[
    {
        "type": "qrcode",
        "symbol": [
            {
                "seq": 0,
                "data": "HelloWorld9887725216",
                "error": null
            }
        ]
    }
]

Yukarıdaki JSON'u bir arada ayrıştırmak için bunun gibi JSON modeli oluşturabilirsiniz.

[System.Serializable]
public class QrCodeResult
{
    public QRCodeData[] result;
}

[System.Serializable]
public class Symbol
{
    public int seq;
    public string data;
    public string error;
}

[System.Serializable]
public class QRCodeData
{
    public string type;
    public Symbol[] symbol;
}

Ve sonra aşağıdaki şekilde ayrıştırın ...

var myObject = JsonUtility.FromJson<QrCodeResult>("{\"result\":" + jsonString.ToString() + "}");

Artık JSON / CODE'yi ihtiyacınıza göre değiştirebilirsiniz. https://docs.unity3d.com/Manual/JSONSerialization.html


Bu aslında oldukça iyi çalışıyor, Symbol gibi bir dizi olmayan bir sınıfla çalışmasını sağladı.
Gennon

4
Bunu unity 2018 ile deniyorum ama bu işe yaramıyor: diziler çözümlenmedi
Jean-Michaël Celerier

Unity 2018 ve 2019'da kullanıldı. Harika çalışıyor. Dizi verilerine aşağıdaki gibi erişin: Debug.Log(myObject.result[0].symbol[0].data);veya for(var i = 0; i <= myObject.result.Length - 1; i ++) { Debug.Log(myObject.result[i].type); }veyaforeach (var item in myObject.result) { Debug.Log(item.type); }
Towerss

@Narottam Goyal, yönteminiz bazı durumlarda işe yaramıyor, aynı zamanda yeni başlayanlar için çok zor bir çözüm, bu cevaba bu konu bağlantısında
Juned Khan Momin

@JunedKhanMomin cevabınız temelde aynıdır, ancak buradaki sorunun JSON verilerinde belirli bir kök seviye dizisi ile ilgili olduğunu belirtmeden. Genel olarak, Programcının çok daha ayrıntılı olan yanıtına başvurmalısınız .
derHugo

2

Eğer eklemek zorunda [System.Serializable]için PlayerItemböyle, sınıf:

using System;
[System.Serializable]
public class PlayerItem   {
    public string playerId;
    public string playerLoc;
    public string playerNick;
}

1

JSON Dosyasını Okumak için bu basit örneğe bakın

JSON Dosyanız (StreamingAssets / Player.json)

{
    "Name": "MyName",
    "Level": 4
}

C # Komut Dosyası

public class Demo
{
    public void ReadJSON()
    {
        string path = Application.streamingAssetsPath + "/Player.json";
        string JSONString = File.ReadAllText(path);
        Player player = JsonUtility.FromJson<Player>(JSONString);
        Debug.Log(player.Name);
    }
}

[System.Serializable]
public class Player
{
    public string Name;
    public int Level;
}

1
Peki ya diziler? Ve bu yanıt , 3 yıldan fazla bir süre önce kabul edilen yanıtta zaten belirtilmeyen neyi ekler ?
derHugo

@derHugo File.ReadAllText, yararlı olduğunu düşündüğüm ve başka hiçbir cevabın bahsetmediği bir çağrı içeriyor :)
Ruzihm

@Ruzihm başka bir cevabın belirtilmemesinin nedeni, bu sorunun kapsamının nasıl (de) serileştirileceğidir ..
FileIO'nun

0

Kırpma []ve iyi olmalısın. []Öğelerini yineleyebilmek için tam olarak ihtiyacınız olan bir JSON dizisi tanımlayın.


0

@Maximiliangerhardt'ın dediği gibi, MiniJson'ın düzgün bir şekilde seriyi kaldırma özelliği yok. JsonFx kullandım ve bir cazibe gibi çalışıyor. İle çalışır[]

player[] p = JsonReader.Deserialize<player[]>(serviceData);
Debug.Log(p[0].playerId +" "+ p[0].playerLoc+"--"+ p[1].playerId + " " + p[1].playerLoc+"--"+ p[2].playerId + " " + p[2].playerLoc);

0

Newtonsoft.JsonSadece ekle kullanabilirsinizNewtonsoft.dll projenize ve komut altında kullanmak

using System;
using Newtonsoft.Json;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{

    [Serializable]
    public class Person
    {
        public string id;
        public string name;
    }
    public Person[] person;

    private void Start()
    {
       var myjson = JsonConvert.SerializeObject(person);

        print(myjson);

    }
}

görüntü açıklamasını buraya girin

başka bir çözüm JsonHelper kullanıyor

using System;
using Newtonsoft.Json;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{

    [Serializable]
    public class Person
    {
        public string id;
        public string name;
    }
    public Person[] person;

    private void Start()
    {
        var myjson = JsonHelper.ToJson(person);

        print(myjson);

    }
}

görüntü açıklamasını buraya girin


Örneğin, android üzerine inşa ettiğinizde newtonsoft'un birlik içinde çalışmadığını unutmayın. Yine de birlik düzenleyicide çalışacak .. Birlik için bir newtonsoft çatalı gibi görünüyor, bu durumda stackoverflow.com/questions/59194154/…
Rose

0

Vector3 kullanıyorsanız bunu yaptım

1- Bir sınıf oluşturuyorum Oyuncu Adlandır

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[Serializable]
public class Player
{
    public Vector3[] Position;

}

2- sonra ona böyle diyorum

if ( _ispressed == true)
        {
            Player playerInstance = new Player();
            playerInstance.Position = newPos;
            string jsonData = JsonUtility.ToJson(playerInstance);

            reference.Child("Position" + Random.Range(0, 1000000)).SetRawJsonValueAsync(jsonData);
            Debug.Log(jsonData);
            _ispressed = false;
        }

3- ve sonuç bu

"Konum": [{"x": - 2.8567452430725099, "y": - 2.4323320388793947, "z": 0.0}]}


0

Birlik <= 2019

Narottam Goyal'in diziyi bir json nesnesine sarmak ve ardından bir yapı halinde seriyi kaldırmak konusunda iyi bir fikri vardı. Aşağıdakiler, her seferinde yeni bir sınıf oluşturmanın aksine, bunu her türden diziler için çözmek için Generics kullanır.

[System.Serializable]
private struct JsonArrayWrapper<T> {
    public T wrap_result;
}

public static T ParseJsonArray<T>(string json) {
    var temp = JsonUtility.FromJson<JsonArrayWrapper<T>>("{\" wrap_result\":" + json + "}");
    return temp.wrap_result;
}

Aşağıdaki şekilde kullanılabilir:

string[] options = ParseJsonArray<string[]>(someArrayOfStringsJson);

Unity 2020

Unity 2020'de çok daha iyi bir json kütüphanesi olan resmi bir newtonsoft paketi var.


2
Sağladığınız bağlantı çalışmıyor , ancak bu bağlantı ilgili makale olarak listeleniyor: docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@2.0/… şu notla birlikte: "Bu, dahili Unity Geliştirme için tasarlanmış bir pakettir Projeler ve dolayısıyla bu paket desteklenmiyor. Riski size ait olmak üzere kullanın. "
R2RT
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.